正则表达式,允许的时间段,不是逗号

时间:2017-10-24 19:31:40

标签: regex

我正在寻找

的正则表达式

有效:

20000
20.000

如果使用逗号,则不应与逗号匹配,之后是什么。 无效

20.000,12

现在我正在使用:

([0-9]+([.][0-9]+)*)+?

但是这个也用逗号后面的最后两位数字。

enter image description here

4 个答案:

答案 0 :(得分:3)

您可以使用

^\d+(?:\.\d+)*
# start of line, 1+ digits, .1234 eventually

a demo on regex101.com

答案 1 :(得分:2)

如果在正则表达式的开头添加^,则只有字符串开头的部分匹配

^([0-9]+([.][0-9]+)*)+?

但我认为

^\d+(\.\d+)*

是匹配数字的更好解决方案

答案 2 :(得分:-1)

如果要匹配浮点数,请使用(^\d*.?\d+)

答案 3 :(得分:-1)

问题中没有任何内容表明结果必须是有效数字。因此看起来表达式需要接受任何数字或句点,在这种情况下正则表达式非常简单,以下内容应该有效:

^([0-9\.]+)$

以下是我展示结果的测试

20000 - pass
20.000 - pass
20.000,12 - fail
1.000.000 - pass
23000,000 - fail

有关信息,我使用下面的PHP代码进行测试:

$testdata = array('20000', '20.000', '20.000,12', '1.000.000', '23000,000');
$pattern = "/^([0-9\.]+)$/";
foreach ($testdata as $k => $v) {
    $result = preg_match($pattern, $v)? 'pass': 'fail';
    echo "".$v." - ".$result."<br />";
}