我想进行javascript验证,接受所有数字和小数点格式。
例如:
1,000,000.00可以
1.000.000,00没问题
1.000,000.00不行。
1.000,000,00不行。
1,000.000,00不行。
1,000.000.00不行
基于我在这里得到的是:
/^[1-9][0-9]{0,2}(,[0-9]{3})*(\.[0-9]{2})?$/
仅对1,000,000.00有效,不适用于1.000.000,00
我如何验证两种格式?
已更新:
如果千分不是强制性的,例如:
1000000.00可以或
1000000,00可以
答案 0 :(得分:2)
这是你想要的正则表达式..
^(([1-9]\d{0,2}(((\.\d{3})*(,\d{2})?)|((,\d{3})*(\.\d{2})?)))|(0(\.|,)\d{1,2})|([1-9]\d+((\.|,)\d{1,2})?))$
这是证明它可以处理所有案件的链接
答案 1 :(得分:2)
假设小数部分和千位分隔符是必需的,而不是可选的,并且0不是允许的值(正如您的示例和正则表达式所建议的那样):
^[1-9]\d{0,2}(?:(?:,\d{3})*\.\d{2}|(?:\.\d{3})*,\d{2})$
作为一个冗长的正则表达式:
^ # 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
答案 2 :(得分:1)
最简单的(虽然不是最优雅的)方法是为另一个案例编写类似的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})?))$/
答案 3 :(得分:1)
您可以将,
和\.
替换为[,.]
以接受任一位置。它也会使1,000.000.00
好。
更难以使正则表达式在JavaScript中表现得像因为你不能使用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
答案 4 :(得分:1)
查看正则表达式的最佳方法是将其吹嘘 一个非常大的字体,并将其拆分为替代品(|)
var s='1,000,000.00';// tests
var result= /(^\d+([,.]\d+)?$)/.test(s) || // no thousand separator
/((^\d{1,3}(,\d{3})+(\.\d+)?)$)/.test(s) || // comma thousand separator
/((^\d{1,3}(\.\d{3})+(,\d+)?)$)/.test(s); // dot thousand separator
alert(result)
把它的野蛮人放在一起 -
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
*/