我已经有正则表达式,只允许数字和点。
但它允许多个点。就我而言,我只想要一个点。
cell
答案 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