Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 用于查找数字0或十进制的正则表达式_Regex - Fatal编程技术网

Regex 用于查找数字0或十进制的正则表达式

Regex 用于查找数字0或十进制的正则表达式,regex,Regex,我正在寻找一个正则表达式,它将验证从0开始的数字,并且可能包含小数 有什么想法吗?这应该是你想要的: ^[0-9]+([,.][0-9]+)?$ 它将匹配从0开始的任何数字,然后是任何数字,可能是a或。我总是使用任何数字来构建我的正则表达式。它有点像拖放,有一个你的正则表达式和结果的实时预览 它看起来像^0[,.0-9]* '/^([0-9\.]+)$/' 如果测试字符串是正十进制数,则将匹配一个简单的正则表达式以验证数字: ^\d+(\.\d+)?$ 这适用于具有可选前导零、可选单点和更

我正在寻找一个正则表达式,它将验证从0开始的数字,并且可能包含小数


有什么想法吗?

这应该是你想要的:

^[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,以先到者为准。至于其他的,我就像一个好管家,因为我不这样做[ᴍ$ꜰᴛ] ᴡɪɴᴅᴏᴡ﹩: 从来没有,将来也不会。我死定了。