【问题标题】:Regex to validate whole and decimal numbers in a textarea正则表达式验证文本区域中的整数和小数
【发布时间】:2015-12-10 14:36:18
【问题描述】:

我有一个文本区域,它在每一行上只能接受整数和小数。 我需要一个 JQuery 正则表达式来验证 Focus Out 上的输入。所以基本上每一行的值应该是整数或小数。

例如:

有效场景:

1
51425.125
2552
600000
1.51425
3.65

无效场景:

.123
123.
123.  56
1213.56.25
234.   (spaces after the decimal point)

我尝试了各种正则表达式组合,但似乎没有一个能完美运行:

\b\s([-+]?(\d+|\.\d+|\d+\.\d*))($|[^+-.])

当有 2 个十进制值时,此正则表达式会失败。

\b[0-9\s]*(\.*[0-9\s]*)*

这个正则表达式允许值之间和之后的空间。

\b(?:^|\s)(?=.)((?:0|(?:[1-9](?:\d*|\d{0,2}(?:,\d{3})*)))?(?:\.\d*[1-9])?)(?!\S)

此正则表达式不允许用户输入多行值。

浏览了几个链接,但似乎没有一个对我有用:
Regular Expression for Decimal or Blank
Regular expression - number with spaces and decimal comma
Decimal number regular expression, where digit after decimal is optional
http://regexone.com/problem/matching_decimal_numbers

【问题讨论】:

    标签: javascript jquery regex


    【解决方案1】:

    thisJSFiddle:

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

    JavaScript

    $("#input").on("input", function(){
        var validateThis = $(this).val();
        var validateCount = validateThis.split("\n").length;
        var result = validateThis.match(/^\d+(?:\.\d+)?$/gm);
        if(result && result.length == validateCount){
            $("#result").text("Valid input! :)");
        } else{
            $("#result").text("Invalid input! :(");
        }
    });
    

    HTML

    <textarea id="input" rows="4"></textarea>
    <div id="result"></div>
    

    【讨论】:

    • 似乎适用于给定的场景。 /^\d+(\.\d+)?$/gm
    • 这不接受换行符,因此会引发错误。
    • @Batman 啊,错过了问题的那一部分。让我看看我是否可以调整它。
    • @Batman 你检查了上面的链接吗,Arg0n,对非捕获组使用^\d+(?:\.\d+)?$
    • @Tushar 有任何标志来强制它检查所有内容是否有效?
    【解决方案2】:

    那么我们可以在 RegEx 中包含 \n 或 \r\n 吗?

    是的,我们可以。下面是一个测试整个文本是否由带数字的行组成的表达式:

    ^\d+(\.\d+)?(\n\d+(\.\d+)?)*\n?$
    
    • ^$ - 整个文本必须匹配。
    • \d+(\.\d+)? - 至少一位数字,可选后跟一个句点和至少一位数字
    • (\n…)* - 后跟任意数字(包括零):换行符 ...
    • \n? - 最后允许换行符(如果你愿意的话)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-12
      • 1970-01-01
      相关资源
      最近更新 更多