2013-12-07 55 views
0

如何从jQuery字符串中删除除数字,字母和连字符以外的所有内容?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; 
}); 

回答

-1

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

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

你要逃避它,否则它会尝试检测范围(如'az':' “^ [a-zA-Z0-9 \ - ] + $”'。此外,增加空格将允许空格。 – Sylvain

+0

@Peter我确实在等待这个答案的更新,所以我自己做了一个(有一些补充) 。 – Sylvain

5

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

注意,连字符被使用\逃脱,否则它用于指定一个范围等a-z(从a字符z)。

这个代码将只检查,如果最后一个输入的字符是在允许列表中,你可能也想在你的领域糊状后检查,该值仍然是正确的:

// 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

既然有如此多的关注在这些回答中在字符类中包含连字符,并且由于我无法通过谷歌搜索轻松找到这些信息,我想我会补充一点,如果连字符是第一个字符,那么连字符不需要被转义类规范。其结果是,下面的字符类也能发挥作用,以指定除了其它字符连字符:

[-a-zA-Z0-9] 
+0

注意,它也行放一个连字符转义在一个字符类的结尾。 – ridgerunner

+0

@Ridgerunner这给了我一个错误我。你能举一个例子,你用? –

+1

这个问题是Ruby版本处理JavaScript。 – ridgerunner

相关问题