无法禁止测试中出现负数

时间:2019-07-19 10:40:52

标签: javascript regex

我只接受正十进制数字。这是我所做的:

$("#btn").on("click", function() {
            var regex = new RegExp(/^\+?\d+,|\.?\d+$/);
            var test = regex.test($("#param_valeur").val());
            if (test == false) {
                $.alert({
                    title: 'Erreur',
                    content: 'Veuillez saisir un nombre !',
                });
            } else {
                $.post({
                    url:"/track/admin/configureSeuilHorsZone",
                    data:$("#frm").serialize(),
                    success:function(data, status, xhr) {
                        $("#george_content").load("/track/welcome");
                    }
                });
            }
        });

但是在运行时它接受负数!那么如何禁止负数呢?

4 个答案:

答案 0 :(得分:0)

您的正则表达式替换和模式没有按照您的想象做,但是无论如何,这是一个仅匹配正十进制数字/整数的正则表达式模式:

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

如果您希望在整数部分使用逗号,请使用:

^\+?\d{1,3}(?:,\d{3})*(?:\.\d+)?$

以下是第二种正则表达式模式的说明:

^            from the start of the string
\+?          match an optional leading + sign
\d{1,3}      then match 1 to 3 digits
(?:,\d{3})*  followed by zero or more thousands groups (e.g. ,123)
(?:\.\d+)?   followed by an optional decimal component
$            end of string

答案 1 :(得分:0)

我不会为您提供替代的正则表达式,我将向您解释您的示例出了什么问题。

您正在使用管道令牌连接两个不同的正则表达式,它们是:

 \+?\d+,

 \.?\d+

乍一看,这似乎是正确的。问题是^$的工作方式。 “行首”标记(^)和“行尾”标记($)仅适用于相邻的正则表达式,不适用于使用管道分隔的每个正则表达式。

因此,如果插入一个负数,则“第二个”正则表达式将匹配,因为它只说“匹配包含可选点和数字序列的所有内容”,而没有关于行首的规则

要解决此问题,只需将两个正则表达式都放在括号中,这样“行首”和“行尾”将同时应用于这两者:

var regex = new RegExp(/^(\+?\d+,|\.?\d+)$/);
console.log(regex.test('-10'));

答案 2 :(得分:0)

为什么要使用正则表达式?只需检查输入是否为数字,然后检查该值是否小于0。

$("#btn").on("click", function() {
  const value = $("#param_valeur").val()
  if (isNaN(value) || value < 0) {
    console.log('Error')
  } else {
    console.log('Success')
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="param_valeur" type="text">
<button id="btn">Check</button>

答案 3 :(得分:0)

我使用了此正则表达式:var regex = new RegExp(/^\+?\d+,?\d*$|^\+?\d+\.?\d*$/);

谢谢大家:)