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; }); 

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

请注意,连字符使用\转义,否则用于指定范围,如az (从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, '')); } }); 

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

 [-a-zA-Z0-9] 

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

 "^[az AZ 0-9 -]+$"