我正在尝试使用正则表达式验证来仅检查十进制值或数值。但是用户输入数值,它不是第一个数字“0”
我该怎么做?
答案 0 :(得分:113)
1-9范围内的数字,后跟零个或多个其他数字:
^[1-9]\d*$
允许带有可选小数点后跟数字的数字。 1-9范围内的数字,后跟零个或多个其他数字,然后可选地后跟一个小数点,后跟至少1位数字:
^[1-9]\d*(\.\d+)?$
备注:强>
开始和结束的^
和$
锚定基本上说整个字符串必须与模式匹配
()?
匹配括号内的整个事物的0或1
处理逗号的更新:
在正则表达式中.
具有特殊含义 - 匹配任何单个字符。要按字母顺序匹配字符串中的.
,您需要使用.
转义 \.
这是上面正则表达式中\.
的含义。因此,如果您想使用逗号,则模式只是:
^[1-9]\d*(,\d+)?$
进一步更新以处理逗号和句号
如果您想在数字组之间允许。,在积分和小数部分之间允许,,请尝试:
^[1-9]\d{0,2}(\.\d{3})*(,\d+)?$
即。这是1-9范围内的数字,后跟最多2个其他数字,然后是0或更多组完整停止,然后是3位数字,然后可选地使用逗号和数字。
如果您想在数字之间的任何位置允许。,请尝试:
^[1-9][\.\d]*(,\d+)?$
即。数字1-9后跟零个或多个数字或句号,可选地后跟一个逗号和一个或多个数字。
答案 1 :(得分:64)
实际上,没有一个给定的答案完全覆盖了请求 由于OP没有提供特定用例或数字类型,我将尝试涵盖所有可能的案例和排列。
此数字通常称为无符号整数,但您也可以将其称为正非小数,包括零。其中包括0
,1
和99999
等数字
涵盖此验证的正则表达式是:
/^(0|[1-9]\d*)$/
此数字通常称为有符号整数,但您也可以将其称为非小数。其中包括0
,1
,99999
,-99999
,-1
和-0
等数字。
涵盖此验证的正则表达式是:
/^-?(0|[1-9]\d*)$/
正如您可能已经注意到的那样,我还将-0
作为有效数字。但是,有些人可能会争论这种用法,并告诉这不是一个实数(你可以阅读更多关于签名零here)。所以,如果你想从这个正则表达式中排除这个数字,那么你应该使用的是:
/^-?(0|[1-9]\d*)(?<!-0)$/
我添加的所有内容都是(?<!-0)
,这意味着在此断言之前不要包含-0
。这个(?<!...)
断言称为负向后看,这意味着任何短语替换...
都不应出现在此断言之前。 Lookbehind有局限性,就像短语不能包括量词。这就是为什么在某些情况下我会使用Lookahead,这是相同的,但方式相反。
许多正则表达式,包括Perl和Python使用的那些,只允许固定长度的字符串。您可以使用文字文本,字符转义,除
\X
以外的Unicode转义和字符类。您不能使用量词或反向引用。您可以使用交替,但仅当所有替代方案具有相同的长度时。这些风格通过首先回溯主题字符串以获得与lookbehind需求一样多的字符来评估lookbehind,然后从左到右尝试在lookbehind中的正则表达式。
您可以阅读更多回合查找断言here。
此数字通常称为 unsigned float 或 unsigned double ,但您也可以将其称为正小数,包括零。其中包括0
,1
,0.0
,0.1
,1.0
,99999.000001
,5.10
等数字。
涵盖此验证的正则表达式是:
/^(0|[1-9]\d*)(\.\d+)?$/
有些人可能会说,.1
,.0
和.00651
(分别与0.1
,0.0
和0.00651
相同)也是有效的分数,我不能不同意它们。所以这里有一个正则表达式,它还支持这种格式:
/^(0|[1-9]\d*)?(\.\d+)?(?<=\d)$/
此号码通常称为 signed float 或 signed double ,但您也可以将其称为小数。其中包括0
,1
,0.0
,0.1
,1.0
,99999.000001
,5.10
,{{1}等数字},-0
,-1
,-0.0
,-0.1
,-99999.000001
。
涵盖此验证的正则表达式是:
5.10
对于非/^-?(0|[1-9]\d*)(\.\d+)?$/
信徒:
-0
对于那些想要支持隐身零表示的人,例如/^(?!-0(\.0+)?$)-?(0|[1-9]\d*)(\.\d+)?$/
,.1
,请使用以下正则表达式:
-.1
非/^-?(0|[1-9]\d*)?(\.\d+)?(?<=\d)$/
信徒和看不见的零信徒的组合,使用这个正则表达式:
-0
有些人可能希望在他们的验证中支持具有科学字符/^(?!-0?(\.0+)?$)-?(0|[1-9]\d*)?(\.\d+)?(?<=\d)$/
的数字,顺便说一下,这是一个绝对有效的数字,它很快就代表了很长的数字。您可以阅读有关科学记数法here的更多信息。这些数字通常看起来像e
(1e3
),1000
(0.001),并且得到许多主要编程语言(例如JavaScript)的完全支持。您可以通过检查表达式1e-3
是否返回'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
和{{ 1}}:
-0e5
正数正则表达式验证,也支持上面的整数,加上-0e-6
,/^(?!-0)-?(0|[1-9]\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
,.1e3
和.0e0
等数字:
.0e-5
正数和正数的正则表达式验证,支持上面的正数,但也支持.1e-7
,/^(0|[1-9]\d*)?(\.\d+)?(?<=\d)(e-?(0|[1-9]\d*))?$/i
,-0e3
和-0.1e0
等数字:
-56.0e-3
非-0.0e10
信徒的正数和正数正则数确认,与上述相同,但现在它禁止/^-?(0|[1-9]\d*)(\.\d+)?(e-?(0|[1-9]\d*))?$/i
,-0
,-0
,{{1 }和-0.00000
:
-0.0e0
带有隐形零支持正则表达式验证的负数和正数,还支持上述正数和负数,此外还包括-0.00000e5
,-0e-6
,/^(?!-0(\.0+)?(e|$))-?(0|[1-9]\d*)(\.\d+)?(e-?(0|[1-9]\d*))?$/i
和-.1e3
等数字:
-.0e0
非-.0e-5
信徒和无形零信徒的组合的负数和正数,与上述相同,但禁止-.1e-7
,/^-?(0|[1-9]\d*)?(\.\d+)?(?<=\d)(e-?(0|[1-9]\d*))?$/i
和-0
等数字:
-.0e0
在许多编程语言中,像-.0000e15
这样的十六进制数字的字符串表示可以很容易地转换为十进制数-.0e-19
。
因此,人们可能希望在他的验证脚本中支持它
以下正则表达式仅支持十六进制数字表示:
/^(?!-0?(\.0+)?(e|$))-?(0|[1-9]\d*)?(\.\d+)?(?<=\d)(e-?(0|[1-9]\d*))?$/i
这些最终的正则表达式,支持隐形的零数字。
0x4F7A
20346
希望我涵盖了许多编程语言支持的所有数字排列 祝你好运!
哦,忘了提一下,那些想要验证数字的人包括一千个分隔符,你应该首先清除所有的逗号(/^0x[0-9a-f]+$/i
),因为那里可能有任何类型的分隔符,你可以&实际上涵盖了所有这些
但您可以在数字验证之前先删除它们:
/^(-?(0|[1-9]\d*)?(\.\d+)?(?<=\d)(e-?(0|[1-9]\d*))?|0x[0-9a-f]+)$/i
答案 2 :(得分:7)
我遇到了同样的问题,但我也希望“.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
答案 3 :(得分:6)
我测试了所有给定的正则表达式但很遗憾没有人通过这些测试:
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$"
答案 4 :(得分:2)
这是一个很好的数字工作正则表达式。这接受带逗号和小数的数字。
/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/
答案 5 :(得分:1)
以下是验证数字的正则表达式:
^(-?[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"};
答案 6 :(得分:1)
/([0-9]+[.,]*)+/
匹配任何带或不带昏迷或点数的数字
它可以匹配
122
122,354
122.88
112,262,123.7678
bug:它也匹配262.4377,3883(但它并不重要)
答案 7 :(得分:1)
试试这段代码,希望它能帮到你
String regex = "(\\d+)(\\.)?(\\d+)?"; for integer and decimal like 232 232.12
答案 8 :(得分:1)
一个简单的正则表达式来匹配数字输入和可选的 2 位小数。
/^\d*(\.)?(\d{0,2})?$/
您可以修改 {0,2} 以匹配您的小数首选项 {min, max}
验证片段:
const source = document.getElementById('source');
source.addEventListener('input', allowOnlyNumberAndDecimals);
function allowOnlyNumberAndDecimals(e) {
let str = e.target.value
const regExp = /^\d*(\.)?(\d{0,2})?$/
status = regExp.test(str) ? 'valid' : 'invalid'
console.log(status + ' : ' + source.value)
}
<input type="text" id="source" />
答案 9 :(得分:0)
如果你需要用点,逗号,正数和负数来验证小数,请尝试:
Object testObject = "-1.5";
boolean isDecimal = Pattern.matches("^[\\+\\-]{0,1}[0-9]+[\\.\\,]{1}[0-9]+$", (CharSequence) testObject);
祝你好运。
答案 10 :(得分:0)
以下是上述要求的完美之处:
^[0-9]{1,3}(,[0-9]{3})*(([\\.,]{1}[0-9]*)|())$
答案 11 :(得分:-2)
正则表达式 ^(\d+(\.\d+)?)$
适用于每个数字。
为了演示,我将它嵌入到一个可运行的 JS-fiddle 中:
const source = document.getElementById('source');
source.addEventListener('input', allowOnlyNumberAndDecimals);
function allowOnlyNumberAndDecimals(e) {
let str = e.target.value
const regExp = /^(\d+(\.\d+)?)$/
let status = regExp.test(str) ? 'valid' : 'invalid'
console.log(status + ' : ' + source.value)
}
body {
height: 100vh;
background: pink;
color: black;
justify-content: center;
align-items: center;
}
<h1>VALIDATE ALL NUMBERS :)<h1>
<input type="text" id="source" />