我需要一个正则表达式,以这种方式验证十进制数
例如。如果小数点前有5位数字,则小数点后最多可以存在45位数字。
允许使用不带小数点的50位数字。
例如,它应匹配这些数字:
12345678901234567890123456789012345678901234567890 12345.123456789012345678901234567890123456789012345
如果有人能在这方面提供帮助,那就太好了!
那是你要的吗?
^(?:\d{1,50}|(?=.{3,51}$)\d+\.\d+)$
var test = [
'12345678901234567890123456789012345678901234567890', '12345.123456789012345678901234567890123456789012345',
'123456.7890',
'123456789012345678901234567890123456789012345678901',
'12345678901234567890123456789012345678901234567890.1'
];
console.log(test.map(function (a) {
return a+' :'+/^(?:\d{1,50}|(?=.{3,51}$)\d+\.\d+)$/.test(a);
}));
您可以使用此正则表达式,它将匹配具有1到50之间的数字的整数,或者将匹配长度为2到51的十进制数,假设.2
有效但2.
无效。
^(?:\d{1,50}|(?=\d*\.\d+$)(?=.{2,51}$)[\d.]*)$
说明:
^
- >字符串的开头(?:
- >非团体开始\d{1,50}
- >匹配整数长度1到50|
- >用于分隔十进制大小写的替代方法(?=\d*\.\d+$)
- >确保形式为零或更多的数字后跟一个文字点后跟一个或多个数字(?=.{2,51}$)
- >确保位数从2到51[\d.]*
- >实际捕获数字)
- >小组结束$
- >字符串结尾这是一个5-6而不是50-51的正则表达式,所以你可以很容易地玩它。
^(?:\d{1,5}|(?=\d*\.\d+$)(?=.{2,6}$)[\d.]*)$