接受正则表达式[JavaScript]中的字母数字字符、空格、点和破折号

接受正则表达式[JavaScript]中的字母数字字符、空格、点和破折号,javascript,regex,Javascript,Regex,我正在做一个正则表达式,它接受数字0-9,字母ca-z,包括点,破折号和空格。到目前为止,我所做的是我的regexp接受字母数字字符和空格,但我不知道如何包含点和破折号 到目前为止,我的代码是: function isValid(input) { var m = input.val(); var expreg = /^[a-zA-ZñÑ ]{4,20}$/; if (!expreg.test(m)) { input.css('border', '1

我正在做一个正则表达式,它接受数字0-9,字母ca-z,包括点,破折号和空格。到目前为止,我所做的是我的regexp接受字母数字字符和空格,但我不知道如何包含点和破折号

到目前为止,我的代码是:

function isValid(input) {

    var m = input.val();

    var expreg = /^[a-zA-ZñÑ ]{4,20}$/;

    if (!expreg.test(m)) {

        input.css('border', '1px solid red');
        input.css('color', 'red');
        return false;

    } else {
        input.css('border', '');
        input.css('color', '');
    }

    return true;

},

有什么想法吗?谢谢大家!

要接受破折号或点,只需使用反斜杠转义字符,并将其视为文字:

var expreg = /^[a-zA-ZñÑ\.\- ]{4,20}$/;
此外,来自:

连字符可以包含在开始括号之后,或结束括号之前,或否定插入符号之后。[-x]和[x-]都匹配x或连字符。[^-x]和[^x-]匹配任何非x或连字符的字符。这适用于本教程中讨论的所有风格。字符类中无法形成范围的其他位置的连字符可能被解释为文字或错误。关于这一点,正则表达式的风格非常不一致

此外,正如Ry在下面指出的,并在这里指出:

通常的元字符是字符类中的普通字符,不需要反斜杠转义

因此,您可以将其简化为以下内容,无需转义:

var expreg = /^[-a-zA-ZñÑ. ]{4,20}$/;

注意,你不必逃跑。在字符类中。如果你想特别确定,那么你是故意通过引入更多的噪音使正则表达式更难阅读。@vlaz抱歉,我完全忘记了/sWorked!只要加上。和\-在方括号内。