如何创建一个验证字符串是否为的正则表达式:
- 一个号码
- [可选]
,
小数点 - [如果你吃需要]另一个数字
还:
- 它没有一个点
.
作为数千的符号。
我试图创建它:
[0-9,]+[^.]
但结果:
22,33 CORRECTO
33.44 INCORRECTO
22,33... CORRECTO // PERO DEBERIA SER INCORRECTO!!!
232.33dfdfd CORRECTO // PERO DEBERIA SER INCORRECTO!!!
预期成绩:
22,33 CORRECTO
225,3432 CORRECTO
33.44 INCORRECTO
22,33... INCORRECTO
23, INCORRECTO
试试这个表达
调试演示
这应该是你的表达
请记住,如果将它作为字符串传递给函数,则必须转义斜杠,如下所示:
此表达式接受否定词,使用
\d
而不是[0-9]
,而不创建不必要的组或转义不必要的字符:或者,如果您想接受科学记数法(例如:)
1.2e+05
:Demo en regex101.com
关于差异的一些说明:
负面的。忘记数字也可以是负数并以 开头是一个常见的错误
-
。我希望当代码已经投入生产时,它有助于避免头痛。使用
\d
. 在某些语言中,\d
它匹配来自其他字母的数字。其中最重要的有:Python3、.Net、Perl、C/C++(带 boost)、R、TCL 或 Oracle。如果您想避免该细节,我们将在那里替换所有\d
by[0-9]
。但对于其余部分,\d
它完全一样,[0-9]
并且在视觉上更好。无需创建不必要的组。当您使用括号时,您不仅是在进行分组,而且还在捕获与该组匹配的文本。但是有些组没有捕获,其语法为,以避免使用不必要的内存。此外,对于正在阅读您的正则表达式的人来说,这更容易,因为很明显您正在分组,但您并不关心将那部分取回。-我知道,起初很难阅读这些内容,这不是量词,但我向您保证,在很短的时间内它会被连续阅读并自动理解。
(?:subpatrón)
?
:
没有逃避什么是不必要的。逗号 (
,
) 不是正则表达式中的元字符。因此,它不需要被转义(既不是\,
,也不是[,]
),只是,
正则表达式中的 被视为文字。Java没有字符串文字的选项☹。这是唯一一种(我所知道的)你必须转义每个斜杠才能使用这个正则表达式的语言:
代码:
使用此正则表达式,您可以验证没有小数的千位数字是否用逗号分隔。
例子:
您可以在http://regexr.com/上对其进行验证
这更好,因为它允许您在必要时仅输入整数,如果您输入一个点,它只接受它,或者使用小数,我给您留下一些案例场景
Debuggex 演示 https://www.debuggex.com/r/X43uNbM0EERtm8NF
有了这个,它验证它在小数点后有 1 或 2 个字符。
小数位不是强制性的。
^[0-9]+([.][0-9]{1,2})?$
https://www.debuggex.com/r/qTPyvu3WB9xuUCaj
如果我正确理解您的描述,以下字符串将是有效数字:
为了使该字符串也被接受,正则表达式将是:
调试演示
^
包括链起点和链终点锚是很重要的$
。如果没有锚链
$
,则链232.33dfdfd
不正确。如果
22,
它不是一个正确的字符串,那么要使用的正则表达式是:调试演示