我正在构建一个CMS,用户可以通过文本输入控件自定义页面的SEO URL。例如,假设用户正在创建图库,他们希望在http://www.theirsite.com/my-1st-gallery访问他们的网页。
注意“my-1st-gallery”部分如何不包含URL的任何非法字符。由于大多数用户不知道允许和不允许的内容,我想创建一个JavaScript正则表达式过滤器,可以在键入时过滤/转换所有非法字符。
我知道如何使用jQuery / JavaScript来监听键盘事件,但我不知道如何使用正则表达式来执行以下操作:
有人能提供一个如何做正则表达式部分的好例子。我再次理解如何倾听关键事件。
感谢您的时间!
好的,有了所有这些好的答案,我想我可以将它拼凑在一起用于我的网络应用程序。我希望我可以选择不止一个答案作为我的决赛! :谢谢大家!
答案 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)