我的表达式只有有效数字...
^[0-9,-\.]+$
这很好用,但我需要确保最多可以输入1 ,
和1 .
?这需要迎合不同的文化,因此,
和.
的顺序与我无关。
任何人都可以帮忙吗?
答案 0 :(得分: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+)?)$
我认为真的没有更短的版本。不要担心所有?:
。它们只是使子模式不可捕获。由于您无论如何都不需要,通常会显着提高性能。
答案 1 :(得分:0)
这是我可能会使用的。
/^-?\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
*/
编辑:您可以将其更改为
/^-?\d{0,2}((\.?\d{3})*(,\d{1,2})?|(,?\d{3})*(\.\d{1,2})?)$/
^^^ ^^^
如果要将浮动部分限制为2位数。
答案 2 :(得分:0)
你可以简单地使用这个正则表达式..这非常简单明了..
^(\d*|\d*\,\d*|\d*\.\d*|\d*\.\d*\,\d*|\d*\,\d*\.\d*)$