正则expression式validation中的十进制或数字值
我正在尝试使用正则expression式validation来检查只有十进制值或数字值。 但用户input数字值,不是第一位数字“0”
我怎么做?
1-9范围内的数字,后跟零个或多个其他数字:
^[1-9]\d*$
允许带有可选小数点后面跟数字的数字。 1-9范围内的一个数字,后跟零个或多个其他数字,然后可以select后跟一个小数点,后跟至less一个数字:
^[1-9]\d*(\.\d+)?$
笔记:
-
开始和结束的
^和$锚点基本上说整个string必须匹配模式 -
()?匹配括号内整个事物的0或1
更新来处理逗号:
在正则expression式中. 有一个特殊的含义 – 匹配任何单个字符。 从字面上匹配a . 在一个string中,你需要逃避 . 使用\. 这是\.的意思\. 在上面的正则expression式。 所以,如果你想使用逗号,而模式是简单的:
^[1-9]\d*(,\d+)?$
进一步更新来处理逗号和句号
如果你想允许一个。 在数字组和小数部分之间,然后尝试:
^[1-9]\d{0,2}(\.\d{3})*(,\d+)?$
即这是1-9范围内的一个数字,然后是最多2个其他数字,然后是零个或多个完整的组,然后是3个数字,然后可选地,如前所述的逗号和数字。
如果你想允许一个。 数字之间的任何地方然后尝试:
^[1-9][\.\d]*(,\d+)?$
即数字1-9,随后是零个或多个数字或满停止,可选地后跟一个逗号和一个或多个数字。
其实,没有一个给出的答案是完全覆盖的要求。
由于OP没有提供具体的使用案例或types的数字,我将尽力涵盖所有可能的案例和排列。
常规数字
整体积极
此数字通常称为无符号整数 ,但您也可以将其称为正数非小数数字,包括零。 这包括数字0和99999 。
涵盖此validation的正则expression式是:
/^(0|[1-9]\d*)$/
testing这个正则expression式
整个正面和负面
这个数字通常被称为有符号整数 ,但也可以称之为非小数。 这包括像99999 , -99999 , -1和-0 。
涵盖此validation的正则expression式是:
/^-?(0|[1-9]\d*)$/
testing这个正则expression式
正如你可能注意到的,我还包括-0作为一个有效的数字。 但是,有些人可能会争论这个用法,并且说这不是一个真正的数字(你可以在这里阅读更多关于签名零)。 所以,如果你想从这个正则expression式中排除这个数字,下面是你应该使用的:
/^-?(0|[1-9]\d*)(?<!-0)$/
testing这个正则expression式
我所添加的是(?<!-0) ,这意味着在这个断言之前不包括-0 。 这个(?<!...)断言称为否定倒序 ,这意味着任何短语replace...应该不会出现在这个断言之前。 逆向思维有其局限性,就像这个短语不能包含量词一样。 这就是为什么在某些情况下,我会使用Lookahead,而这是相同的,但方式相反。
许多正则expression式,包括Perl和Python使用的,只允许固定长度的string。 您可以使用文本文本,字符转义,
\X以外的Unicode转义和字符类。 您不能使用量词或反向引用。 你可以使用交替,但只有当所有的select具有相同的长度。 这些风格评估lookbehind首先回顾主题string作为lookbehind需要尽可能多的字符,然后尝试从左到右的lookbehind里面的正则expression式。
你可以在这里阅读更多关于Lookaround断言。
分数
正
这个数字通常被称为unsigned float或unsigned double ,但是你也可以把它叫做正数分数,包括零。 这包括数字如99999.000001 。
涵盖此validation的正则expression式是:
/^(0|[1-9]\d*)(\.\d+)?$/
testing这个正则expression式
有人可能会说,像.1 , .0和.00651这样的数字(分别与0.00651和0.00651相同)也是有效的分数,我不能不同意。 所以这里是一个额外支持这种格式的正则expression式:
/^(0|[1-9]\d*)?(\.\d+)?(?<=\d)$/
testing这个正则expression式
消极和积极
这个数字通常被称为签名浮点数或有符号双 精度数,但是您也可以称其为小数。 这包括数字如-99999.000001 , -0 , -1 , -0.0 , -0.1 , -99999.000001 。
涵盖此validation的正则expression式是:
/^-?(0|[1-9]\d*)(\.\d+)?$/
testing这个正则expression式
对于非信徒:
/^(?!-0(\.0+)?$)-?(0|[1-9]\d*)(\.\d+)?$/
testing这个正则expression式
对于那些想要支持不可见零表示的人,比如.1 ,-. .1 ,使用下面的正则expression式:
/^-?(0|[1-9]\d*)?(\.\d+)?(?<=\d)$/
testing这个正则expression式
非-0信徒和不可见的零信徒的组合,使用这个正则expression式:
/^(?!-0?(\.0+)?$)-?(0|[1-9]\d*)?(\.\d+)?(?<=\d)$/
testing这个正则expression式
带有科学记数法的数字(AKA指数符号)
有些人可能会希望在他们的validation中支持,具有科学性的数字e ,这是一个绝对有效的数字,它被创build为短期代表一个非常长的数字。 你可以在这里阅读更多关于科学记数法。 这些数字通常看起来像1e3 ( 1000 ), 1e-3 (0.001),并得到许多主要编程语言(如JavaScript)的全面支持。 您可以通过检查expression式'1e3'==1000返回true来testing它。
我将把所有上述部分的支持分开,包括用科学记数法编号。
常规数字
整数正数validation,支持像6e4 16e-10 0e0这样的数字,也支持像6e4一样的常规数字:
/^(0|[1-9]\d*)(e-?(0|[1-9]\d*))?$/i
testing这个正则expression式
整数正数和负数的正则expression式validation,支持像-6e4 , -16e-10 , -0e0这样的数字,还支持像-0 , -11这样的常规数字和上面所有的正整数:
/^-?(0|[1-9]\d*)(e-?(0|[1-9]\d*))?$/i
testing这个正则expression式
对于非-0信徒,整数正整数和负数的正则expression式validation,除了现在禁止像-0 , -0e0 , -0e5和-0e-6 :
/^(?!-0)-?(0|[1-9]\d*)(e-?(0|[1-9]\d*))?$/i
testing这个正则expression式
分数
正数的正则expression式validation,也支持上面的整数,加上数字,如56.0e-3 0.0e10和1.010e0 :
/^(0|[1-9]\d*)(\.\d+)?(e-?(0|[1-9]\d*))?$/i
testing这个正则expression式
正数与不可见零支持正则expression式validation,还支持以上正数,另外还有数字如.0e-5和.1e-7 :
/^(0|[1-9]\d*)?(\.\d+)?(?<=\d)(e-?(0|[1-9]\d*))?$/i
testing这个正则expression式
负数和正数的正则expression式validation,支持上面的正数,还有数字如-0e3 , -0.1e0 , -56.0e-3和-0.0e10 :
/^-?(0|[1-9]\d*)(\.\d+)?(e-?(0|[1-9]\d*))?$/i
testing这个正则expression式
除了现在禁止-0 , -0.00000 , -0.0e0 , -0.00000e5和-0e-6这样的数字之外,非-0信徒的正数和负数正则expression式-0.00000 -0.0e0 ,
/^(?!-0(\.0+)?(e|$))-?(0|[1-9]\d*)(\.\d+)?(e-?(0|[1-9]\d*))?$/i
testing这个正则expression式
负数和正数用不可见的零支持正则expression式validation,还支持上面的正数和负数,另外还有数字如-.1e3 ,-. -.0e0 ,-. -.0e-5和-.1e-7 :
/^-?(0|[1-9]\d*)?(\.\d+)?(?<=\d)(e-?(0|[1-9]\d*))?$/i
testing这个正则expression式
与非-0信徒和不可见零信徒组合的负数和正数,与上述相同,但禁止数字如-.0e0 ,-. -.0000e15和-.0e-19 :
/^(?!-0?(\.0+)?(e|$))-?(0|[1-9]\d*)?(\.\d+)?(?<=\d)(e-?(0|[1-9]\d*))?$/i
testing这个正则expression式
带hex表示的数字
在许多编程语言中,像0x4F7A这样的hex数字的string表示可能很容易转换为十进制数字20346 。
因此,人们可能想要在他的validation脚本中支持它。
以下正则expression式仅支持hex数字表示forms:
/^0x[0-9a-f]+$/i
testing这个正则expression式
所有排列
这些最终的正则expression式支持不可见的零号码。
签署零信徒
/^(-?(0|[1-9]\d*)?(\.\d+)?(?<=\d)(e-?(0|[1-9]\d*))?|0x[0-9a-f]+)$/i
testing这个正则expression式
没有签署的零信徒
/^((?!-0?(\.0+)?(e|$))-?(0|[1-9]\d*)?(\.\d+)?(?<=\d)(e-?(0|[1-9]\d*))?|0x[0-9a-f]+)$/i
testing这个正则expression式
希望我涵盖了许多编程语言支持的所有数字排列。
祝你好运!
噢,忘了提到,那些想要validation数字的人包括一千个分隔符,你应该首先清除所有的逗号( , ),因为可能有任何types的分隔符,你实际上不能覆盖它们。
但是在数字validation之前,您可以先删除它们:
//JavaScript function clearSeparators(number) { return number.replace(/,/g,''); }
我有同样的问题,但我也希望“.25”是一个有效的十进制数。 这是我使用JavaScript的解决scheme:
function isNumber(v) { // [0-9]* Zero or more digits between 0 and 9 (This allows .25 to be considered valid.) // ()? Matches 0 or 1 things in the parentheses. (Allows for an optional decimal point) // Decimal point escaped with \. // If a decimal point does exist, it must be followed by 1 or more digits [0-9] // \d and [0-9] are equivalent // ^ and $ anchor the endpoints so tthe whole string must match. return v.trim().length > 0 && v.trim().match(/^[0-9]*(\.[0-9]+)?$/); }
我的trim()方法在哪里
String.prototype.trim = function() { return this.replace(/(^\s*|\s*$)/g, ""); };
Matthew DesVoigne
我已经testing了所有给定的正则expression式,但不幸的是他们都没有通过这些testing:
String []goodNums={"3","-3","0","0.0","1.0","0.1"}; String []badNums={"001","-00.2",".3","3.","a",""," ","-"," -1","--1","-.1","-0", "2..3", "2-", "2...3", "2.4.3", "5-6-7"};
这是我写的通过所有这些testing的最好的:
"^(-?0[.]\\d+)$|^(-?[1-9]+\\d*([.]\\d+)?)$|^0$"

这是一个伟大的数字工作正则expression式。 这接受逗号和小数的数字。
/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/
这是我的validation数字的正则expression式:
^(-?[1-9]+\\d*([.]\\d+)?)$|^(-?0[.]\\d*[1-9]+)$|^0$
有效的号码:
String []validNumbers={"3","-3","0","0.0","1.0","0.1","0.0001","-555","94549870965"};
无效的号码:
String []invalidNumbers={"a",""," ","-","001","-00.2","000.5",".3","3."," -1","--1","-.1","-0"};
如果您需要validation点,逗号,正数和负数的小数点,请尝试以下操作:
Object testObject = "-1.5"; boolean isDecimal = Pattern.matches("^[\\+\\-]{0,1}[0-9]+[\\.\\,]{1}[0-9]+$", (CharSequence) testObject);
祝你好运。
下面是提到的要求的完美之一:
^[0-9]{1,3}(,[0-9]{3})*(([\\.,]{1}[0-9]*)|())$
/([0-9]+[.,]*)+/与任何具有或不具有彗形像差或点的数字匹配
它可以匹配
122 122,354 122.88 112,262,123.7678
错误:它也匹配262.4377,3883(但它并不重要)
试试这个代码,希望它能帮助你
String regex = "(\\d+)(\\.)?(\\d+)?"; for integer and decimal like 232 232.12