jQuery只允许数字,字母和连字符

时间:2013-12-07 19:13:57

标签: javascript jquery regex

如何使用jQuery从字符串中删除除数字,字母和连字符之外的所有内容?

我发现这段代码只允许使用字母数字字符,但我不确定如何添加连字符。

$('#text').keypress(function (e) {
    var regex = new RegExp("^[a-zA-Z0-9]+$");
    var str = String.fromCharCode(!e.charCode ? e.which : e.charCode);
    if (regex.test(str)) {
        return true;
    }

    e.preventDefault();
    return false;
});

3 个答案:

答案 0 :(得分:6)

您只需将正则表达式更改为:"^[a-zA-Z0-9\-]+$"

请注意,使用\转义连字符,否则用于指定a-z范围(从az的字符)。

此代码仅检查最后输入的字符是否在允许列表中,您可能还想检查字段中的粘贴后是否仍然正确:

// The function you currently have
$('#text').keypress(function (e) {
    var allowedChars = new RegExp("^[a-zA-Z0-9\-]+$");
    var str = String.fromCharCode(!e.charCode ? e.which : e.charCode);
    if (allowedChars.test(str)) {
        return true;
    }
    e.preventDefault();
    return false;
}).keyup(function() {
    // the addition, which whill check the value after a keyup (triggered by Ctrl+V)
    // We take the same regex as for allowedChars, but we add ^ after the first bracket : it means "all character BUT these"
    var forbiddenChars = new RegExp("[^a-zA-Z0-9\-]", 'g');
    if (forbiddenChars.test($(this).val())) {
        $(this).val($(this).val().replace(forbiddenChars, ''));
    }
});

答案 1 :(得分:1)

由于人们非常关注在这些答案中在字符类中包含连字符,并且由于我无法通过Google搜索轻松找到这些信息,我想我会补充说如果连字符不需要转义,如果它是类规范中的第一个字符。因此,除了其他字符外,以下字符类也可用于指定连字符:

[-a-zA-Z0-9]

答案 2 :(得分:-1)

我认为你可以在方括号内加一个连字符。

"^[a-z A-Z 0-9 -]+$"