如何更改现有regex以接受逗号

how to change the existing regex to accept commas

本文关键字:regex 何更改      更新时间:2023-09-26

可能重复:
正则表达式,用于匹配文本中带或不带逗号和小数的数字

var regex =  /^[0-9][0-9]{0,5}$|^[0-9][0-9]{0,5}['.][0-9]$/;

有效值为300030000希望在上面的正则表达式中有逗号。我无法获得

此正则表达式将测试逗号是否位于正确位置:

/^[0-9]{1,3}(,[0-9]{3})*('.[0-9]*)?$/

您可以看到一个在此处键入时进行验证的工作示例:http://jsfiddle.net/jfriend00/u9VRX/

作为解释,正则表达式是:

start of string
1-3 digits
followed by 0 or more sequences of ,nnn where n is a digit
followed by an optional sequence that starts with a period
   and consists of 0 or more digits
end of string

如果你不需要逗号,并且无论如何都要解析数字,那么最简单的方法就是先删除任何逗号,从而忽略它们:

var numStr = str.replace(/,/g, "");

如果您想知道当它无效时到底出了什么问题,那么使用纯正则表达式要困难得多。我找不到最简单的方法来解决这个问题,而且它通常也不会告诉你数字出了什么问题,所以我会先使用一些简单的javascript。

function checkValid(str) {
    // check for legal characters
    if (!str.match(/^[0-9,]+('.[0-9]*)?$/)) {
        // illegal characters present
        return("illegal_chars");
    }
    // strip off trailing decimal part
    var parts = str.split(".");
    if (parts.length > 2) {
        // too many periods
        return("too_many_periods");
    }
    // split each comma segment (if there are any)
    parts = parts[0].split(",");
    if (parts.length > 1) {
        for (var i = parts.length - 1; i > 0; i--) {
            if (parts[i].length != 3) {
                // wrong number of digits between commas 
                return("wrong_digits_between_commas");
            }
        }
        if (parts[0].length > 3) {
            // wrong number of digits in first segment before first comma
            return("too many digits before first comma");
        }
    }
    // if you got here without any errors, then all commas are legal
    return("");  // indicate success
}

当您在此处键入时,您可以看到此操作:http://jsfiddle.net/jfriend00/W6FnT/