【问题标题】:Regex in JavaScript for validating decimal numbersJavaScript 中用于验证十进制数的正则表达式
【发布时间】:2012-04-05 06:46:21
【问题描述】:

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

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

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

【问题讨论】:

标签: javascript regex numbers decimal


【解决方案1】:

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

编辑:要在 Javascript 中测试字符串匹配,请使用以下 sn-p:

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

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

【讨论】:

  • @micha,抱歉修正了我第一个正则表达式中的错字
  • 使用 var regexp = /^\d+\.?\d{0,2}$/;如果你想有一个可选的逗号分隔符。
【解决方案2】:

正则表达式

/^\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 来测试正则表达式!

【讨论】:

    【解决方案3】:
    ^\d+(\.\d{1,2})?$
    

    将允许:

    1. 244
    2. 10.89
    3. 9.5

    将不允许:

    1. 10.895
    2. 10.
    3. 10.8.9

    【讨论】:

    • @ShardaprasadSoni 以我的帖子为例
    • 如果我输入 0000.100 这将是无效的十进制正则表达式应该是什么?
    【解决方案4】:

    最多有 2 位小数的数字:

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

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

    【讨论】:

    • 如何使用变量设置最大小数位数?谢谢
    【解决方案5】:

    我发现我可以使用

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

    小数点后两位以上。

    【讨论】:

      【解决方案6】:

      试试这样的正则表达式:

      (?=[^\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, ., 空字符 请注意,这适用于正数

      【讨论】:

        【解决方案7】:

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

        另见我的页面example of the input key filter

        【讨论】:

        • 我们可以限制小数点前只有6位吗?
        • 将 /^(-?\d*)((\.(\d{0,2})?)?)$/i 替换为 /^(-?\d{0, 6})((\.(\d*)?)?)$/i
        【解决方案8】:

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

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

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

        编辑:

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

        如果你也想要负数。

        【讨论】:

        • 这实际上不处理 [0, 1) 范围内的小数
        • 确实如此,在这里测试regex101.com。特别是,前半部分是 (0(\.\d{1,2})?)。或者至少像 OP 要求的那样,它最多保留 2 位小数。
        【解决方案9】:

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

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

        【讨论】:

          【解决方案10】:
           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";
                  }
              }
          

          这是一个函数,它将接受任何小数位数和不带任何小数位的十进制数。

          谢谢... :)

          【讨论】:

          • 您可以将代码发布为文本而不是图像吗?
          • 你用了什么 var amount = parseFloat(amounttext);如果稍后您使用 test(amounttext) 并且金额未在任何地方使用?
          【解决方案11】:

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

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

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

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

          【讨论】:

            【解决方案12】:

            这行得通吗?

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

            【讨论】:

            • . 代表任意字符 | [0-9]\d 相同
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-07-02
            • 2023-03-08
            • 1970-01-01
            • 2018-08-26
            • 1970-01-01
            • 2018-03-02
            相关资源
            最近更新 更多