Regex 用于查找数字0或十进制的正则表达式
我正在寻找一个正则表达式,它将验证从0开始的数字,并且可能包含小数Regex 用于查找数字0或十进制的正则表达式,regex,Regex,我正在寻找一个正则表达式,它将验证从0开始的数字,并且可能包含小数 有什么想法吗?这应该是你想要的: ^[0-9]+([,.][0-9]+)?$ 它将匹配从0开始的任何数字,然后是任何数字,可能是a或。我总是使用任何数字来构建我的正则表达式。它有点像拖放,有一个你的正则表达式和结果的实时预览 它看起来像^0[,.0-9]* '/^([0-9\.]+)$/' 如果测试字符串是正十进制数,则将匹配一个简单的正则表达式以验证数字: ^\d+(\.\d+)?$ 这适用于具有可选前导零、可选单点和更
有什么想法吗?这应该是你想要的:
^[0-9]+([,.][0-9]+)?$
它将匹配从0开始的任何数字,然后是任何数字,可能是a或。我总是使用任何数字来构建我的正则表达式。它有点像拖放,有一个你的正则表达式和结果的实时预览
它看起来像^0[,.0-9]*
'/^([0-9\.]+)$/'
如果测试字符串是正十进制数,则将匹配一个简单的正则表达式以验证数字:
^\d+(\.\d+)?$
这适用于具有可选前导零、可选单点和更多数字的数字
-从字符串的开头到结尾进行匹配(不会验证^…$
)ab12.4c
-至少一位数字\d+
-可选的(…)?
-文字点和一个或多个数字\。\d+
请注意,使用此表达式时,0.1将有效,但.1将无效。因为十进制数可能有或可能没有小数点,和可能有或可能没有小数点之前的数字,如果它们后面有数字,和可能有或可能没有小数点之后的数字,您必须使用以下选项:
^(\d+(\.\d*)?|\d*\.\d+)$
通常写得更好的是:
^(?:\d+(?:\.\d*)?|\d*\.\d+)$
(?x)
^ # anchor to start of string
(?: # EITHER
\d+ (?: \. \d* )? # some digits, then optionally a decimal point following by optional digits
| # OR ELSE
\d* \. \d+ # optional digits followed then a decimal point and more digits
) # END ALTERNATIVES
$ # anchor to end of string
而且写得更好:
^(?:\d+(?:\.\d*)?|\d*\.\d+)$
(?x)
^ # anchor to start of string
(?: # EITHER
\d+ (?: \. \d* )? # some digits, then optionally a decimal point following by optional digits
| # OR ELSE
\d* \. \d+ # optional digits followed then a decimal point and more digits
) # END ALTERNATIVES
$ # anchor to end of string
如果您的正则表达式编译器不支持
\d
,或者还取决于正则表达式引擎对Unicode的感知程度,如果您希望只匹配ASCII数字,而不匹配Unicode十进制数属性(快捷方式Nd
)的任何数字,即,任何带有Numeric\u Type=Decimal
属性的内容-然后您可能希望在[0-9]
中交换我使用过的上面所有实例\d
这一个确实不起作用-因为它验证了以下内容:“0.5a”,其中包含字母嗯,是的,这就是我说的原因,而不是“这是解决方案”: ;-)这验证了0,42.,…,.12.411…,.42,1,,,1,,,42McGillicuddy
,这肯定没有任何帮助。这一个似乎不喜欢0。这现在强制一个前导零?是的,它将强制一个前导零,然后是任何数字,可能以十进制结尾。嗯,是的,也许我误解了OP问题,从0开始,我把它当作“with”。。。更新了我的答案。+1除非我遗漏了部分答案,否则对此答案的部分评论是错误的。提到这一点很有道理,而且。是有效的十进制分隔符,取决于本地。我认为这是一个模糊的问题。严格来说,十进制数是用十进制数制表示的数字,而我猜你实际上指的是十进制分数(带有
或,
)。你能澄清并给出几个有效字符串和无效字符串的例子吗?这对C、Perl或Java等编译器所接受的十进制数不起作用。你需要让它接受所有这些:42
,42.
,4.2
,和.42
@tchrist-嗯。我很感激你的热情,但这不是一个决定的问题吗?在每种情况下,您都可以决定是否需要所有这些文本—在这种情况下,它们是否对OP有效。我不需要支持C和Perl,是吗.42
很好,我的正则表达式中缺少了它(\d*\。?\d+
可以解决它,或者更有效的方法)。顺便说一下,在C#42中,
无效-您可以在C.1.8 Literals>real literal下查看。而且,42.
很奇怪:)
不仅仅是C和Perl。它也有AWK、GO、C++、Python、java,还有很多其他的编程语言。这源于你所接受的自由主义哲学。至于42.
,从远古时代起,这就是区分浮点和int的标准方法——或者FORTRAN,以先到者为准。至于其他的,我就像一个好管家,因为我不这样做[ᴍ$ꜰᴛ] ᴡɪɴᴅᴏᴡ﹩: 从来没有,将来也不会。我死定了。