实际上我有这种模式:
([0-9]{1,3}\.)?[0-9]{1,3},*?[0-9]{0,2}$
做我需要的,允许用户键入:1.234,56 / 1234,56 / 123,56 / 1,但是问题是它允许1.000(千位点分隔符-我不需要这个),是如果至少有一个点,有没有办法使逗号必需?
请不要使用JavaScript解决方案。
答案 0 :(得分:1)
答案 1 :(得分:1)
模式,*?[0-9]{0,2}
的最后一部分匹配0+倍的逗号,后跟0-2个数字,例如,使总匹配对1.1,,,
有效。
您还可以使用alternation来匹配包含点和逗号的变体,或者|
匹配一个或多个数字,然后匹配一个逗号和1的可选部分-2位数字。
^(?:[0-9]{1,3}\.[0-9]{1,3},[0-9]{1,2}|[0-9]+(?:,[0-9]{2})?)$
说明
^
字符串的开头(?:
非捕获组
[0-9]{1,3}\.[0-9]{1,3},[0-9]{1,2}
出现点号时请使用逗号|
或[0-9]+(?:,[0-9]{2})?
匹配1个以上的数字,后跟一个可选的逗号和1-2个数字)
关闭非捕获组$
字符串的结尾