Regex 正则表达式验证中的十进制或数值

Regex 正则表达式验证中的十进制或数值,regex,validation,Regex,Validation,我正在尝试使用正则表达式验证来只检查十进制值或数字值。但用户输入的数值不是第一位数字“0” 如何操作?1-9范围内的数字,后跟零或更多其他数字: ^[1-9]\d*$ 允许带有可选小数点和数字的数字。1-9范围内的数字,后跟零或多个其他数字,然后可选地后跟小数点,后跟至少一个数字: ^[1-9]\d*(\.\d+)?$ 注意事项: ^和$锚定到开头和结尾,基本上表示整个字符串必须与模式匹配 ()?在括号中匹配整个内容的0或1 更新以处理逗号: 在正则表达式中,具有特殊含义-匹配任何单个字

我正在尝试使用正则表达式验证来只检查十进制值或数字值。但用户输入的数值不是第一位数字“0”


如何操作?

1-9范围内的数字,后跟零或更多其他数字:

^[1-9]\d*$
允许带有可选小数点和数字的数字。1-9范围内的数字,后跟零或多个其他数字,然后可选地后跟小数点,后跟至少一个数字:

^[1-9]\d*(\.\d+)?$
注意事项:

  • ^
    $
    锚定到开头和结尾,基本上表示整个字符串必须与模式匹配

  • ()?
    在括号中匹配整个内容的0或1

更新以处理逗号:

在正则表达式中,
具有特殊含义-匹配任何单个字符。要逐字匹配字符串中的
,需要使用
\
转义
。这就是上面regexp中
\.
的含义。因此,如果您想使用逗号,则模式简单:

^[1-9]\d*(,\d+)?$
进一步更新以处理逗号和句号

如果要在数字组之间允许a,在整数和小数部分之间允许a,请尝试:

^[1-9]\d{0,2}(\.\d{3})*(,\d+)?$
^[1-9][\.\d]*(,\d+)?$
i、 e.这是一个范围为1-9的数字,后跟最多2个其他数字,然后是零组或多组句号,后跟3个数字,然后可选逗号和数字,如前所述

如果要允许数字之间的任何位置出现,请尝试:

^[1-9]\d{0,2}(\.\d{3})*(,\d+)?$
^[1-9][\.\d]*(,\d+)?$

i、 e.数字1-9后跟零或多个数字或句号(可选后跟逗号和一个或多个数字)。

我也有同样的问题,但我还希望“.25”是一个有效的十进制数字。以下是我使用JavaScript的解决方案:

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

这是一个很好的数字正则表达式。它接受带逗号和小数的数字

/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/

如果需要使用点、逗号、正数和负数验证十进制,请尝试以下方法:

Object testObject = "-1.5";
boolean isDecimal = Pattern.matches("^[\\+\\-]{0,1}[0-9]+[\\.\\,]{1}[0-9]+$", (CharSequence) testObject);

祝你好运。

我已经测试了所有给定的正则表达式,但不幸的是没有一个通过这些测试:

    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"};
"^(-?0[.]\\d+)$|^(-?[1-9]+\\d*([.]\\d+)?)$|^0$"
以下是我写的通过所有这些测试的最好作品:

    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"};
"^(-?0[.]\\d+)$|^(-?[1-9]+\\d*([.]\\d+)?)$|^0$"

以下是满足上述要求的最佳方案:

^[0-9]{1,3}(,[0-9]{3})*(([\\.,]{1}[0-9]*)|())$

这是我用来验证数字的正则表达式:

^(-?[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"};
无效号码:

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"};
/([0-9]+[,]*)+/
匹配任何带或不带彗差或点的数字

它可以匹配

         122
         122,354
         122.88
         112,262,123.7678

错误:它也匹配262.43773883(但这并不重要)

事实上,没有一个给出的答案完全涵盖了请求。
由于OP没有提供具体的用例或数字类型,我将尝试涵盖所有可能的用例和排列

正则数 全阳性 这个数字通常称为无符号整数,但也可以称为正非小数,包括零。这包括
0
1
99999
等数字
包含此验证的正则表达式是:

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

整体正负 这个数字通常称为有符号整数,但也可以称为非小数。这包括
0
1
99999
-99999
-1
和。
包含此验证的正则表达式是:

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

正如您可能注意到的,我还将
-0
作为一个有效数字。但是,有些人可能会对这种用法提出异议,并指出这不是一个实数(您可以阅读更多关于带符号零的内容)。因此,如果您想从这个正则表达式中排除这个数字,您应该使用以下内容:

/^-?(0|[1-9]\d*)(?<!-0)$/

有人可能会说,像
.1
.0
.00651
(分别与
0.1
0.0
0.00651
相同)这样的数字也是有效的小数,我不能不同意。下面是一个额外支持这种格式的正则表达式:

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

对于非
-0
信徒:

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

对于希望同时支持不可见零表示的用户,如
.1
-.1
,请使用以下正则表达式:

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

带科学符号的数字(又称指数符号) 有些人可能希望在验证中支持带有科学字符
e
的数字,顺便说一句,这是一个绝对有效的数字,它是为表示很长的数字而创建的。你可以阅读更多关于科学记数法的内容。这些数字通常类似于
1e3
(即
1000
)、
1e-3
(即0.001),并且完全受许多主要编程语言(例如JavaScript)的支持。您可以通过检查表达式
'1e3'==1000
是否返回
true

来测试它 我将为以上所有部分提供支持,包括带有科学符号的数字

正则数 整正数正则表达式验证,支持像
6e4
16e-10
0e0
这样的数字,也支持像
0
11
这样的正则数:

/^(0|[1-9]\d*)(e-?(0|[1-9]\d*))?$/i

整正数和负数正则表达式验证,支持像
-6e4
-16e-10
-0e0
这样的数字,但也支持像
-0
-11
这样的正则数以及上面的所有整正数:

/^-?(0|[1-9]\d*)(e-?(0|[1-9]\d*))?$/i

针对非
-0
信徒的完整正数和负数正则表达式验证,与上述相同,但现在它禁止
-0
-0e0
-0e5
-0e-6
等数字:

/^(?!-0)-?(0|[1-9]\d*)(e-?(0|[1-9]\d*))?$/i
/^(?!-0(\.0+)?(e|$))-?(0|[1-9]\d*)(\.\d+)?(e-?(0|[1-9]\d*))?$/i

分数 正数正则表达式验证,也支持上面的整数,加上像
0.1e3
56.0e-3
0.0e10
1.010e0

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

正数
/^\d*(\.)?(\d{0,2})?$/