我需要一个JavaScript正则表达式来验证十进制数。
它应该只允许最多两位小数。例如,它应该允许
它也应该只允许一个句点(
它应该只允许最多两位小数。例如,它应该允许
10.89
但不允许10.899
。它也应该只允许一个句点(
.
)。例如,它应该允许10.89
但不允许10.8.9
。10.89
但不允许10.899
。.
)。例如,它应该允许10.89
但不允许10.8.9
。尝试使用以下表达式:^\d+\.\d{0,2}$
。如果您希望小数位数是可选的,可以使用以下表达式:^\d+(\.\d{1,2})?$
编辑:要在JavaScript中测试字符串匹配,请使用以下代码片段:
var regexp = /^\d+\.\d{0,2}$/;
// returns true
regexp.test('10.5')
/^\d+(\.\d{1,2})?$/
/^-?\d+(\.\d{1,2})?$/
var regexp = /^\d+(\.\d{1,2})?$/;
console.log("POSITIVE ONLY");
console.log("'.74' returns " + regexp.test('.74'));
console.log("'7' returns " + regexp.test('7'));
console.log("'-4' returns " + regexp.test('-4'));
console.log("'10.5' returns " + regexp.test('10.5'));
console.log("'115.25' returns " + regexp.test('115.25'));
console.log("'-120.56' returns " + regexp.test('-120.56'));
console.log("'1535.803' returns " + regexp.test('1535.803'));
console.log("'153.14.5' returns " + regexp.test('153.14.5'));
console.log("'415351108140' returns " + regexp.test('415351108140'));
console.log("'415351108140.55' returns " + regexp.test('415351108140.55'));
console.log("'415351108140.556' returns " + regexp.test('415351108140.556'));
regexp = /^-?\d+(\.\d{1,2})?$/;
console.log("\n");
console.log("POSITIVE OR NEGATIVE");
console.log("'.74' returns " + regexp.test('.74'));
console.log("'7' returns " + regexp.test('7'));
console.log("'-4' returns " + regexp.test('-4'));
console.log("'10.5' returns " + regexp.test('10.5'));
console.log("'115.25' returns " + regexp.test('115.25'));
console.log("'-120.56' returns " + regexp.test('-120.56'));
console.log("...");
/ /
:正则表达式的开始和结束标志^
:匹配字符串的开头位置\d+
:匹配至少一个数字( )?
:这部分是可选的\.
:匹配一个点号\d{1,2}
:匹配一到两个数字$
:匹配字符串的结尾位置如果还想支持负小数,只需在 ^
后面添加 -?
,表示该位置也可以包含一个可选的负号。
你可以使用 regexr.com 或 regex101.com 在浏览器中直接测试正则表达式!
/^\d{0,13}(\.\d{1,2}0*)?$/.test(yourNumber)
,可以允许 10.1200
,你可以使用 Number(yourNumber.toFixed(2))
来移除它,但只有在条件正确的情况下才能这样做! - Yasser CHENIK^\d+(\.\d{1,2})?$
将允许:
244
10.89
9.5
将不允许:
10.895
10.
10.8.9
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Input Key Filter Test</title>
<meta name="author" content="Andrej Hristoliubov anhr@mail.ru">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<!-- For compatibility of IE browser with audio element in the beep() function.
https://www.modern.ie/en-us/performance/how-to-use-x-ua-compatible -->
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<link rel="stylesheet" href="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.css" type="text/css">
<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/Common.js"></script>
<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.js"></script>
</head>
<body>
<h1>Float field</h1>
<input id="Float"
onchange="javascript: onChangeFloat(this)"
onblur="inputKeyFilter.isNaN(parseFloat(this.value), this);"
/>
<script>
function CreateFloatFilterCustom(elementID, onChange, onblur){
try{
inputKeyFilter.Create(elementID
, onChange
, function(elementInput, value){//customFilter
if(value.match(/^(-?\d*)((\.(\d{0,2})?)?)$/i) == null){
inputKeyFilter.TextAdd(isRussian() ?
"Допустимый формат: -[0...9].[0...9] или -[0...9]e-[0...9]. Например: -12.34 1234"
: "Acceptable formats: -[0...9].[0...9] or -[0...9]e-[0...9]. Examples: -12.34 1234"
, elementInput);
return false;
}
return true;
}
, onblur
)
} catch(e) {
consoleError("Create float filter failed. " + e);
}
}
CreateFloatFilterCustom("Float");
function onChangeFloat(input){
inputKeyFilter.RemoveMyTooltip();
var elementNewFloat = document.getElementById("NewFloat");
var float = parseFloat(input.value);
if(inputKeyFilter.isNaN(float, input)){
elementNewFloat.innerHTML = "";
return;
}
elementNewFloat.innerHTML = float;
}
</script>
New float: <span id="NewFloat"></span>
</body>
</html>
同时请查看我的页面输入键过滤示例
^\d+(\.\d+)?$
超过两位小数的情况。
最多有2位小数的数字:
/^\d+(?:\.\d{1,2})?$/
尝试使用像这样的正则表达式:
(?=[^\0])(?=^([0-9]+){0,1}(\.[0-9]{1,2}){0,1}$)
允许的: 1, 10.8, 10.89, .89, 0.89, 1000
不允许的: 20. , 50.89.9, 12.999, ., 空字符 请注意,此方法仅适用于正数
既然您要求进行十进制数字验证,为了完整起见,我建议使用一个正则表达式来防止出现像 06.05 这样的字符串。
^((0(\.\d{1,2})?)|([1-9]\d*(\.\d{1,2})?))$
^-?((0(\.\d{1,2})?)|([1-9]\d*(\.\d{1,2})?))$
function CheckValidAmount() {
var amounttext = document.getElementById('txtRemittanceNumber').value;
if (!(/^[-+]?\d*\.?\d*$/.test(amounttext))){
alert('Please enter only numbers into amount textbox.')
document.getElementById('txtRemittanceNumber').value = "10.00";
}
}
将值作为字符串传递的模式。正则表达式将验证至少一个数字的字符串,可能后跟一个句点和恰好两个数字:
{
"type": "string",
"pattern": "^[0-9]+(\\.[0-9]{2})?$"
}
下面的模式是等效的,除了它还允许空字符串:
{
"type": "string",
"pattern": "^$|^[0-9]+(\\.[0-9]{2})?$"
}