十进制数的正则表达式

时间:2019-03-20 07:35:02

标签: regex

有人可以帮我做正则表达式吗?基本上,我想要一个与十进制数字匹配的正则表达式。

允许的类型:

12
1.3234
0.3423434
23423.12

不允许的类型:

0012
12.324.12
01.2332
.12
121212.

谢谢您的帮助!

致谢!

3 个答案:

答案 0 :(得分:2)

此正则表达式可以完成您的工作。

^(?:[1-9][0-9]*|0)(?:\.[0-9]+)?$

Demo

  • ^-字符串的开头
  • (?:-一个非捕获组的开始
  • [1-9][0-9]*-匹配不以零开头的数字
  • |0-或仅允许匹配零以允许0.34234340.1之类的数字
  • (?:\.[0-9]+)?-(可选)允许数字中的小数部分
  • $-字符串结尾

编辑:基于Allan的建议,使用\d代替[0-9]

如果您的输入仅包含英文数字,​​或者您仅打算匹配英文数字,​​则出于更好的性能和在正则表达式引擎中广泛支持之类的原因,应首选使用[0-9]

但是,如果您的输入包含其他语言(例如印地语 等)的数字,并且您希望匹配任何数字,则应首选\d而不是{{1} }

答案 1 :(得分:0)

那是

^[[:digit:]]+(\.[[:digit:]]+)?$

字符串的开头,然后是一个或多个数字,然后是(可选)一个点和一个或多个数字,然后是字符串的结尾。

如果要迎合标志,请在[+-]?之后添加^

答案 2 :(得分:0)

您可以使用alternation

^(?:0\.\d*[1-9]\d*|[1-9]\d*(?:\.\d+)?)$

Regex demo

说明

  • ^字符串的开头
  • (?:非捕获组
    • 0\.匹配单个零,后跟一个点
    • \d*[1-9]\d*匹配0+个数字,匹配1-9个数字,再匹配0+个数字t仅阻止零匹配
    • |
    • [1-9]\d*匹配一个1-9的数字,然后匹配0+个数字
    • (?:\.\d+)?)可选部分,用于匹配点和1个以上的数字
  • )关闭非捕获组