所有数字和小数点格式的Javascript Regexp
我想做一个javascript验证,它将接受所有数字和小数点格式 例如:所有数字和小数点格式的Javascript Regexp,javascript,regex,Javascript,Regex,我想做一个javascript验证,它将接受所有数字和小数点格式 例如: 1000000.00还可以 1.000.000,00可以 1.000000.00不正常 1.00000000不正常 1000.000,00不正常 1000.000.00不合适 根据我在这里得到的信息: /^[1-9][0-9]{0,2}(,[0-9]{3})*(\[0-9]{2})$/仅对1000000.00有效,对1.000.000,00无效 如何验证这两种格式 更新: 如果1000分不是强制性的,例如: 1000000
1000000.00还可以
1.000.000,00可以 1.000000.00不正常
1.00000000不正常
1000.000,00不正常
1000.000.00不合适 根据我在这里得到的信息:
/^[1-9][0-9]{0,2}(,[0-9]{3})*(\[0-9]{2})$/
仅对1000000.00有效,对1.000.000,00无效
如何验证这两种格式
更新:
如果1000分不是强制性的,例如:1000000.00可以或
1000000,00是可以的最简单的方法(尽管不是目前为止最优雅的)是为另一种情况编写类似的RE,并用“OR”连接它们,如下所示:
/^(([1-9][0-9]{0,2}(,[0-9]{3})*(\.[0-9]{2})?)|([1-9][0-9]{0,2}(\.[0-9]{3})*(,[0-9]{2})?))$/
更新
一个稍微整理过的版本
/^[1-9]\d{0,2}(((,\d{3})*(\.\d{2})?)|((\.\d{3})*(,\d{2})?))$/
这是你想要的正则表达式
^(([1-9]\d{0,2}(((\.\d{3})*(,\d{2})?)|((,\d{3})*(\.\d{2})?)))|(0(\.|,)\d{1,2})|([1-9]\d+((\.|,)\d{1,2})?))$
这是证明它可以处理所有案件的链接
您可以将
、
和\.
替换为[,.]
,以在任一位置接受。但它也会使1000.000.00
正常
在JavaScript中很难让regexp像这样运行,因为不能使用lookbehinds
/^(0|0[.,]\d{2}|[1-9]\d{0,2}((,(\d{3}))*(\.\d{2})?|(\.(\d{3}))*(,\d{2})?))$/
/^ #anchor to the first char of string
( #start group
0 # 0
| # or
0[.,] # 0 or 0 followed by a . or ,
\d{2} # 2 digits
| # or
[1-9] #match 1-9
\d{0,2} #0-2 additional digits
( #start group
(,(\d{3}))* # match , and 3 digits zero or more times
(\.\d{2})? # match . and 2 digits zero or one
| # or
(\.(\d{3})* # match . and 3 digits zero or more times
(,\d{2})? # match , and 2 digits zero or one time
) #end group
) #end group
$/ #anchor to end of string
假设小数部分和千位分隔符是必需的,而不是可选的,并且0不是允许的值(如示例和正则表达式所示): 作为详细的正则表达式:
^ # Start of string
[1-9]\d{0,2} # 1-3 digits, no leading zero
(?: # Match either...
(?:,\d{3})* # comma-separated triple digits
\.\d{2} # plus dot-separated decimals
| # or...
(?:\.\d{3})* # dot-separated triple digits
,\d{2} # plus comma-separated decimals
) # End of alternation
$ # End of string
查看这么大的正则表达式的最好方法是将其放大到 一个非常大的字体,并在备选字体上拆分(|) 总而言之,这是个畜生-
function validDelimNum2(s){
var rx=/(^\d+([,.]\d+)?$)|((^\d{1,3}(,\d{3})+(\.\d+)?)$)|((^\d{1,3}(\.\d{3})+(,\d+)?)$)/;
return rx.test(s);
}
//测试
var N= [
'10000000',
'1,000,000.00',
'1.000.000,00',
'1000000.00',
'1000000,00',
'1.00.00',
'1,00,00',
'1.000,00',
'1000,000.00'
]
var A= [];
for(var i= 0, L= N.length; i<L; i++){
A.push(N[i]+'='+validDelimNum2(N[i]));
}
A.join('\n')
/* returned values
10000000=true
1,000,000.00=true
1.000.000,00=true
1000000.00=true
1000000,00=true
1.00.00=false
1,00,00=false
1.000,00=true
1000,000.00=false
*/
var N=[
'10000000',
'1,000,000.00',
'1.000.000,00',
'1000000.00',
'1000000,00',
'1.00.00',
'1,00,00',
'1.000,00',
'1000,000.00'
]
var A=[];
对于(var i=0,L=N.length;这不是@Siwan想要的,这是他已经拥有的(只是缩短了);但是他的版本更具体(见第一位数字和十进制数字)@Gursel Koca,如果我使用该regexp,0有效吗?如果我验证1000有效吗?这也有效吗?:)它不应该有效,应该写为1000。或者你应该说逗号不是强制性的。@siwan,我已经纠正了。您可以使用第一个正则表达式。但逗号或圆点是强制性的是的,可以。谢谢mkilmanas,但还有其他较短的方法吗?:)
function validDelimNum2(s){
var rx=/(^\d+([,.]\d+)?$)|((^\d{1,3}(,\d{3})+(\.\d+)?)$)|((^\d{1,3}(\.\d{3})+(,\d+)?)$)/;
return rx.test(s);
}
var N= [
'10000000',
'1,000,000.00',
'1.000.000,00',
'1000000.00',
'1000000,00',
'1.00.00',
'1,00,00',
'1.000,00',
'1000,000.00'
]
var A= [];
for(var i= 0, L= N.length; i<L; i++){
A.push(N[i]+'='+validDelimNum2(N[i]));
}
A.join('\n')
/* returned values
10000000=true
1,000,000.00=true
1.000.000,00=true
1000000.00=true
1000000,00=true
1.00.00=false
1,00,00=false
1.000,00=true
1000,000.00=false
*/