我有这种表情的唯一有效数...换号只允许1逗号和小数点正则表达式
^[0-9,-\.]+$
这工作得很好,但我需要确保最大的1 ,
和1 .
能被输入?这需要迎合不同的文化,所以对我来说无关紧要的是,
和.
。
任何人都可以帮忙吗?
我有这种表情的唯一有效数...换号只允许1逗号和小数点正则表达式
^[0-9,-\.]+$
这工作得很好,但我需要确保最大的1 ,
和1 .
能被输入?这需要迎合不同的文化,所以对我来说无关紧要的是,
和.
。
任何人都可以帮忙吗?
如果您正则表达式的味道支持向前看符号可以使用:
^(?=[^,],[^,]$)(?=[^.]\.[^.]$)[\d,.-]+$
如果没有,那么你可以做这样的事情:
^(?:[\d-]*,?[\d-]*\.?[\d-]*|[\d-]*\.[\d-]*,[\d-]*)$
但我觉得这是比较难看。
请注意,我改变了你的角色等级。 [0-9]
可以缩短为\d
(注意,根据您的正则表达式,这可能与其他Unicode数字相比,不仅仅是0-9
),.
不需要在字符类内部转义,并且-
属于字符类的开始或结束,否则他们需要逃脱。有趣的是,在你的情况下,它甚至没有什么区别,因为,-.
创建了一个从,
到.
(按ASCII顺序)的字符范围。然而,该范围内的所有字符顺带地是,
,-
和.
。幸运的你;)
然而,这两个答案真的只是做你明确要求。你的模式将仍然匹配--.--34,---1--2
和类似的东西。如果你真的想匹配与文化无关的小数点的有效数字,你应该使用这个代替:
^-?\d*([.,]\d+)?$
,如果你想匹配.
小数点的有效数字,最多一个,
千分离器(反之亦然),这:
^-?\d{0,3}(?:(?:,\d{3})?(?:\.\d+)?|(?:\.\d{3})?(?:\,\d+)?)$
我不认为有一个更短的版本,真的。不要担心所有的?:
。他们只是使子模式不捕获。既然你不需要这个,那通常会显着提高性能。
这是我可能会用到的。
/^-?\d{0,2}((\.?\d{3})*(,\d+)?|(,?\d{3})*(\.\d+)?)$/
/*
^ beginning of string
-? 0 or 1 minus sign
\d{0,2} 0-2 numbers
(
(\.?\d{3})* 0 or more (3-digit numbers, alternatively preceded by a dot)
(,\d+)? 0 or 1 (comma and at least 1 number)
| or
(,?\d{3})* 0 or more (3-digit numbers, alternatively preceded by a comma)
(\.\d+)? 0 or 1 (dot and at least 1 number)
)
$ end of string
*/
编辑:你可以,如果你想在浮动部分限制在2个位数变成
/^-?\d{0,2}((\.?\d{3})*(,\d{1,2})?|(,?\d{3})*(\.\d{1,2})?)$/
^^^ ^^^
这一点。
您可以简单地使用这个regex..it的相当简单明了..
^(\d*|\d*\,\d*|\d*\.\d*|\d*\.\d*\,\d*|\d*\,\d*\.\d*)$
我会很感激的例子。浮点数是你想要匹配的吗? –
你的正则表达式认为'。---,'是一个有效的数字。我不。 ;)另外,不要忘记正确的逗号类型是依赖于文化的。 – Lucero
我明白你为什么要允许不超过一个小数点分隔符,但为什么只允许一个千位分隔符? “1,000,000.00”不是有效的号码吗?或'1.000.000,00',取决于你的区域? (甚至'1'000'000,00'和其他许多变种可以在现实生活中找到...) –