JavaScript / jQuery Regex用有效字符替换输入字段

时间:2011-07-03 20:50:33

标签: javascript jquery regex javascript-events filtering

我正在构建一个CMS,用户可以通过文本输入控件自定义页面的SEO URL。例如,假设用户正在创建图库,他们希望在http://www.theirsite.com/my-1st-gallery访问他们的网页。

注意“my-1st-gallery”部分如何不包含URL的任何非法字符。由于大多数用户不知道允许和不允许的内容,我想创建一个JavaScript正则表达式过滤器,可以在键入时过滤/转换所有非法字符。

我知道如何使用jQuery / JavaScript来监听键盘事件,但我不知道如何使用正则表达式来执行以下操作:

  1. 过滤除a-z,A-Z,0-9,“ - ”,“_”和空格以外的所有字符。
  2. 将任何“_”和空格更改为“ - ”,并让用户知道给定的字符已转换为“ - ”。
  3. 有人能提供一个如何做正则表达式部分的好例子。我再次理解如何倾听关键事件。

    感谢您的时间!


    好的,有了所有这些好的答案,我想我可以将它拼凑在一起用于我的网络应用程序。我希望我可以选择不止一个答案作为我的决赛! :谢谢大家!

5 个答案:

答案 0 :(得分:8)

$("#inputElement").keyup(function() {
    var input = $(this),
    var text = input.val().replace(/[^a-zA-Z0-9-_\s]/g, "");
    if(/_|\s/.test(text)) {
        text = text.replace(/_|\s/g, "");
        // logic to notify user of replacement
    }
    input.val(text);
});

答案 1 :(得分:2)

使用正则表达式删除除指定内容之外的所有字符,然后将“_”和“”替换为“ - ”:

var inputVal = $('input.myField').val();
var newVal = inputVal.replace(/[^A-Za-z0-9\-_\s]/g, '').replace(/[_\s]/g, '-');
if (newVal != inputVal) {
  alert('We modified something!');
  // Do some more things...
}
$('input.myField').val(newVal);

答案 2 :(得分:2)

您可以这样做(假设您将字符存储在key变量中)

if(key.test(/[_\s]/)){
   key = "-";
   alert("key changed to -");  
}
if(!key.test(/[a-zA-Z0-9\-]/g){
  key = "";
  alert("Invalid key");
}

希望这会有所帮助。干杯

答案 3 :(得分:1)

这将过滤(1)的字符:

/[^a-zA-Z0-9\-_ ]/g

/是JavaScript中的正则表达式分隔符。 []分隔字符类,字符类中的^ 表示“匹配所有字符 不< / em> 包含在此类中“。然后你可以指定类中的单个字符(如“ - ”和“_”),或指定一个范围(如“a-z”)。

分隔符外的g用作“全局搜索”的标志,这意味着正则表达式匹配不止一次,否则它将在第一个匹配时停止然后停止搜索。 \用作转义字符,我用它来转义字符类中的连字符,因为它用作字符类中的元字符来指定字符范围。

我真的不确定是否有必要,因为我没有在Java,PHP和Mozilla JavaScript正则表达式文档中找到任何说明连字符需要像这样转义的内容,以及我在Firefox 5和Chrome 12中的测试表明它无论哪种方式都有效。

您可以阅读有关JavaScript regex at the Mozilla docs的更多信息,并在http://regexpal.com/测试您的正则表达式。

答案 4 :(得分:0)