【问题标题】:Regex for list of comma-separated floats逗号分隔浮点数列表的正则表达式
【发布时间】:2016-03-29 05:49:59
【问题描述】:

我正在尝试验证 javascript 中的表单字段(使用 bootstrap/jquery),但我需要一个正则表达式来匹配一个字符串,该字符串是一个逗号分隔的数字列表,可能有也可能没有空格。

示例: 1,2,3,3.14,6.0, -3.14, -6, 7.13,100

如果它们都是整数并且中间没有空格,我可以得到正则表达式,但是使用小数确实会使事情复杂化。

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    你可以试试这个:

    ^(\s*-?\d+(\.\d+)?)(\s*,\s*-?\d+(\.\d+)?)*$
    

    document.write(
        /^(\s*-?\d+(\.\d+)?)(\s*,\s*-?\d+(\.\d+)?)*$/.test(
            '1,2,3,3.14,6.0, -3.14, -6, 7.13,100'
        )
    );

    如果你分解上面的正则表达式,你会注意到它正在捕获字符串中的第一个数字:

    (\s*-?\d+(\.\d+)?)
    

    为了捕获第一个数字,它会根据需要尝试匹配尽可能多的连续空格 \s*,后跟可选的连字符(或负号)-?,后跟至少一个数字 \d+,然后是可选小数点,小数点(\.\d+)? 后至少有一个连续数字。

    下一组捕获第一组之后的所有数字。

    (\s*,\s*-?(\d+(\.\d+)?)*
    

    与前一个组相同,只是前面有一个额外的\s*,,在匹配逗号, 之前允许有尽可能多的空格\s*。该组根据需要重复多次*

    正则表达式以^ 开头并以$ 结尾,以确保它从字符串^ 的开头开始匹配到字符串$ 的结尾。

    【讨论】:

    • 做到了!我将有一个实地日试图理解那个。
    • (\d+\.\d+)|\d+ 减少到\d+(?:\.\d+)?
    【解决方案2】:

    如果正则表达式不是强制性的,那么试试这个简单的逻辑

    function isValidInput(str)
    {
       return str.split(",").filter(function(val){ return isNaN(val) }).length == 0;
    }
    isValidInput("1,2,3,3.14,6.0, -3.14, -6, 7.13,100");
    

    【讨论】:

    • Regex 是强制性的,它使用模式匹配来匹配 字段中的值进行验证。
    【解决方案3】:

    替代@gurvinder372 的答案,您可以使用Array.every 而不是Array.filter。好处,它不会循环到最后,并且会在第一个无效条目时中断。但是,如果您希望得到所有不正确的值,那么@gurvinder372 的答案是首选。

    function isValidInput(str) {
      return str.split(",").every(function(val) {
        return !isNaN(val);
      })
    }
    var test = isValidInput("1,2,3,3.14,6.0, -3.14, -6, 7.13,100");
    
    alert(test);

    【讨论】:

      【解决方案4】:

      你可以试试这个

      ^(\s*(-|\+)?\d+(?:\.\d+)?\s*,\s*)+(-|\+)?\d+(?:\.\d+)?\s*$
      

      正则表达式分解

      ^ ---> Starting of string
        (\s* ---> Match any number of white spaces
           (-|\+)? ---> Match - or + sign (optional)
           \d+ ---> Match digits before decimal
           (?:\.\d+)? ---> Non capturing group to match digits after decimal(optional)
           \s*,\s* ---> Match any number of spaces before and after comma
        )+ ---> Do this till last comma (or second last number)
      
        (-|\+)?\d+(?:\.\d+)? ---> Same as above but for checking only the last number as it should not have comma
        \s* ---> Check spaces after last number
      $ ---> End of string
      

      Demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多