如何在正则表达式中只允许一个点?

时间:2015-11-27 07:16:51

标签: regex

我已经有正则表达式,只允许数字和点。

但它允许多个点。就我而言,我只想要一个点。

cell

1 个答案:

答案 0 :(得分:11)

简短回答:
([0-9]+(\.[0-9]+)?)

答案很长:
您使用的正则表达式无效。让我们分解一下:

[] - 方括号表示您要匹配列表中的字符
0-9 - 这是一系列字符,因此0到9之间的数字将匹配 . - 字面点符号(仅在方括号内)

但现在发生的事情是,你只会匹配一个数字或一个点字符(" .")。您希望允许更多这些匹配整数。您可以通过附加*(零或更多)或+(一个或多个)来执行此操作。但如果你像这样追加它:

[0-9.]*匹配123.456.789之类的数字,这是不匹配的。

要解决这个问题,我们需要做一些调整: / ^([0-9]+(\.[0-9]+)?) /

现在这个正则表达式意味着:匹配任意数量的数字,然后(如果适用)允许一个点后跟另一组数字。请注意,末尾的问号表示zero or one occurrences,因此不会一遍又一遍地重复。另请注意,要仅包含点,您需要通过在其前面添加\字符来逃避它,因为它不再位于方括号中。开头的短划线(^)确保它是字符串/行的开头。

在此处试试:regex101.com