我只有有效数字的这个表达式......
^[0-9,-\.]+$
这工作正常,但我需要确保最多可以输入1,
和 1 ?这需要迎合不同的文化,所以对我来说哪个订单和进来.
并不重要。,
.
有人能帮忙吗?
如果您的正则表达式支持前瞻,您可以使用:
^(?=[^,],[^,]$)(?=[^.]\.[^.]$)[\d,.-]+$
如果没有,那么您可以执行以下操作:
^(?:[\d-]*,?[\d-]*\.?[\d-]*|[\d-]*\.[\d-]*,[\d-]*)$
但我觉得这很丑陋。
请注意,我更改了您的角色类别。[0-9]
可以缩短为\d
(请注意,取决于您的正则表达式风格,这可能匹配其他 Unicode 数字而不仅仅是0-9
),.
不需要在字符类中转义,并且-
属于字符类的开头或结尾,否则它们需要转义. 有趣的是,在您的情况下,它甚至没有任何区别,因为,-.
创建了一系列从,
to的字符.
(按 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
*/
编辑:您可以将其更改为
/^-?\d{0,2}((\.?\d{3})*(,\d{1,2})?|(,?\d{3})*(\.\d{1,2})?)$/
^^^ ^^^
如果您想将浮动部分限制为 2 位数。
你可以简单地使用这个正则表达式..它非常简单明了..
^(\d*|\d*\,\d*|\d*\.\d*|\d*\.\d*\,\d*|\d*\,\d*\.\d*)$