JavaScript中的正则表达式用于验证十进制数

时间:2012-04-05 06:46:21

标签: javascript regex

我想在JavaScript中使用正则表达式来验证十进制数。

它应该只允许最多两位小数。例如,它应该允许10.89但不允许10.899

它也应该只允许一个句点(.)。例如,它应该允许10.89但不允许10.8.9

12 个答案:

答案 0 :(得分:29)

请尝试使用以下表达式:^\d+\.\d{0,2}$如果您希望小数位数是可选的,则可以使用以下内容:^\d+(\.\d{1,2})?$

编辑:要在Javascript中测试字符串匹配,请使用以下代码段:

var regexp = /^\d+\.\d{0,2}$/;

// returns true
regexp.test('10.5')

答案 1 :(得分:27)

^\d+(\.\d{1,2})?$

将允许:

  1. 244
  2. 10.89
  3. 9.5
  4. 将禁止:

    1. 10.895
    2. 10.
    3. 10.8.9

答案 2 :(得分:8)

正则表达式

/^\d+(\.\d{1,2})?$/

演示

var regexp = /^\d+(\.\d{1,2})?$/;

console.log("'10.5' returns " + regexp.test('10.5'));
console.log("'115.25' returns " + regexp.test('115.25'));
console.log("'1535.803' returns " + regexp.test('1535.803'));
console.log("'7' returns " + regexp.test('7'));
console.log("'.74' returns " + regexp.test('.74'));
console.log("'153.14.5' returns " + regexp.test('153.14.5'));
console.log("'415351108140' returns " + regexp.test('415351108140'));
console.log("'415351108140.5' returns " + regexp.test('415351108140.5'));
console.log("'415351108140.55' returns " + regexp.test('415351108140.55'));
console.log("'415351108140.556' returns " + regexp.test('415351108140.556'));

说明

  1. / /:表达式的开头和结尾
  2. ^:以下内容应该在您正在测试的字符串的开头
  3. \d+:应该至少有一位数字
  4. ( )?:此部分是可选的
  5. \.:这里有一个点
  6. \d{1,2}:此处应该有一到两位数字
  7. $:无论如何,这应该是您正在测试的字符串的末尾
  8. 提示

    您可以使用regexr.comregex101.com直接在浏览器中测试正则表达式!

答案 3 :(得分:3)

最多2位小数的数字:

/^\d+(?:\.\d{1,2})?$/

这应该可以正常工作。请试试:))

答案 4 :(得分:2)

请使用JavaScript语言{$ 3}}查看我的网页上文本输入元素值的跨浏览器过滤器项目。您可以将值过滤为整数,浮点数或写入自定义过滤器,例如电话号码过滤器。请参阅带有十进制指针的浮点数输入的自定义过滤器示例,并限制为十进制指针后的2位数:



<!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>
&#13;
&#13;
&#13;

另见我的页面Input Key Filter

答案 5 :(得分:1)

我发现我可以使用

^\d+(\.\d+)?$

超过两位小数。

答案 6 :(得分:1)

尝试这样的正则表达式:

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

<强>允许: 1, 10.8, 10.89, 0.89, 0.89, 1000

不允许 20., 50.89.9, 12.999, , 空字符 请注意,这适用于正数

答案 7 :(得分:0)

与麦克的答案gven相比...... 它不会在我工作的某些平台上验证任何东西...... 确切地说,它实际上并没有在Dream Viewer中实现。

特此.. 我再次重新写它..它可以在任何平台上工作.. 的 “^ [0-9] +([0-9] {1,2})?$” .. thnkss ..

答案 8 :(得分:0)

 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";
        }
    }

这是一个带十进制数的函数,带有任意小数位数且没有任何小数位。

谢谢...:)

答案 9 :(得分:0)

用于将值作为字符串传递的架构。正则表达式将验证至少一个数字的字符串,并可能在其后跟一个句点以及正好两个数字:

{
    "type": "string",
    "pattern": "^[0-9]+(\\.[0-9]{2})?$"
}

以下模式是等效的,除了它还允许空字符串:

{
    "type": "string",
    "pattern": "^$|^[0-9]+(\\.[0-9]{2})?$"
}

答案 10 :(得分:0)

由于您要求进行十进制数字验证,因此出于完整性考虑,我将使用不允许使用像06.05这样的字符串的正则表达式。

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

稍微复杂一点,但在这种情况下返回false。

答案 11 :(得分:-2)

这有用吗?

[0-9]{2}.[0-9]{2}