36

我想要一个 JavaScript 中的正则表达式来验证十进制数。

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

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

4

12 回答 12

50

试试下面的表达式:^\d+\.\d{0,2}$如果你想让小数位是可选的,你可以使用下面的:^\d+(\.\d{1,2})?$

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

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

// returns true
regexp.test('10.5')
于 2012-04-05T06:48:34.917 回答
44

正则表达式

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

演示

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

console.log("'.74' returns " + regexp.test('.74'));
console.log("'7' returns " + regexp.test('7'));
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("'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. $: 前面的任何内容都应该在您正在测试的字符串的末尾

小费

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

于 2018-02-12T09:48:43.967 回答
42
^\d+(\.\d{1,2})?$

将会允许:

  1. 244
  2. 10.89
  3. 9.5

将不允许:

  1. 10.895
  2. 10.
  3. 10.8.9
于 2012-04-05T06:49:46.967 回答
4

最多有 2 位小数的数字:

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

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

于 2013-12-10T09:54:59.763 回答
4

我发现我可以使用

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

小数点后两位以上。

于 2016-04-07T19:41:08.197 回答
3

由于您要求验证十进制数字,为了完整起见,我将使用不允许像 06.05 这样的字符串的正则表达式。

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

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

编辑:

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

如果你也想要负数。

于 2019-12-17T16:05:19.820 回答
3

请参阅我使用 JavaScript 语言在您的网页上对文本输入元素的值进行跨浏览器过滤器的项目:输入键过滤器。您可以将值过滤为整数、浮点数,或编写自定义过滤器,例如电话号码过滤器。请参阅使用小数指针和限制为小数点后 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>

另请参阅我的输入键过滤器页面示例

于 2015-07-31T04:06:20.623 回答
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、.、空字符注意这适用于正数

于 2016-08-05T06:50:36.653 回答
0

与 mic 给出的答案相比......它没有验证我工作的某些平台中的任何内容......确切地说,它实际上并没有在 Dream Viewer 中工作......

特此..我再次重写它..这将适用于任何平台.. “^[0-9]+(.[0-9]{1,2})?$”.. thnkss..

于 2013-07-29T16:35:40.290 回答
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";
        }
    }

这是一个函数,它将采用任何小数位数且不带任何小数位的十进制数。

谢谢 ... :)

于 2016-09-06T18:39:10.893 回答
0

将值作为字符串传入的架构。正则表达式将验证至少一个数字的字符串,可能后跟一个句点和两个数字:

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

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

{
    "type": "string",
    "pattern": "^$|^[0-9]+(\\.[0-9]{2})?$"
}
于 2019-06-22T08:11:30.983 回答
-3

这行得通吗?

[0-9]{2}.[0-9]{2}
于 2012-04-05T06:48:39.160 回答