我有这个REGEX 几乎完美...它似乎处理所有除了一个带有负号然后是小数的数字。所以,如果我输入:
-.2
我收到错误 -
这是我的正则表达式 - 我测试的其他所有内容都完美无缺......
^(\+|-)?[0-9]{1,11}?(?:\.[0-9]{1,4})?$
这允许:
这些都有效:
-0.2345
-10
12
.125
0.1245
5.555
25000000000 (aka 25 Billion)
25000000000.25
这些不起作用:
-.2
-.421
答案 0 :(得分:20)
正则表达式可能很昂贵......为什么不使用Decimal.Parse或Float.parse?
您目前的实施方式永远不会适用于其他数字样式,例如欧洲。 (点)和,(逗号)互换...而Decimal.Parse将:
string stringValue = "45.889,33";
CultureInfo currentCulture = Thread.CurrentCulture; //set this way up in the execution chain
decimal thenumber = Decimal.Parse(stringValue, currentCulture);
//thenumber = 45889.33 in us-en display format.
数值解析不是正则表达式的理想选择,IMO。
答案 1 :(得分:9)
试试这个:
^(\+|-)?[0-9]{0,11}?(?:\.[0-9]{1,4})?$
<强>更新强>
上述正则表达式接受字符串+
,-
和(空字符串)。您可以使用预测来限制它们。前瞻确保
+
或-
符号后必须有字符。
正确的解决方案是:
^(\+|-)?(?=.{1})[0-9]{0,11}(?:\.[0-9]{1,4})?$
接受字符串:
-0.2345
-10
12
.125
0.1245
5.555
-.2
-.421
不接受字符串:
100000000000.0001
+
-
123456789012
1111111111.12345
+1.11.1
-2.
答案 2 :(得分:2)
这个坏男孩怎么样:
^(\+|-)?([0-9]{1,11}?|)(?:\.[0-9]{1,4})?$
似乎工作=)
答案 3 :(得分:2)
我的$ .02
^(\+|-)?([0-9]{1,11}|)?(?:\.[0-9]{1,4})?$
答案 4 :(得分:2)
关键字:0仅适用于 POSITIVE 数字。
您需要单独的正面和负面陈述。
^(((\+?[0-9]{0,11})|(-[0-9]{1,11}))(?:\.[0-9]{1,4})*)$
答案 5 :(得分:2)
您可以使用word boundary在正确的位置解决所有问题:
^(?:\+|-\b)?[0-9]{0,11}(?:\.[0-9]{1,4})?\b$
{1,11}
更改为{0,11}
以允许小数点前的零位数。\b
不会允许紧随其后的小数点。\b
不允许"+"
或"-"
作为整个字符串。工作示例(改编自John):http://rubular.com/r/c7YLR25r3i