正如其他人推荐的“创建白名单”,但我真的想创建一个黑名单。 这是我的代码
if($("#txtTag").val().length <=0 || $("#txtTag").val() =="")
{
$("#ep-insert-keyword").html("Please Enter Keyword");
$("#ep-insert-keyword").fadeIn("normal");
}
else if(!RegexCheck(/^[a-zA-Z\_]+$/g,$("#txtTag").val()))
{
$("#ep-insert-keyword").html("Special characters are not allowed");
$("#ep-insert-keyword").fadeIn("normal");
}
我想阻止我的用户输入我在正则表达式中定义的任何特殊字符。 我要阻止的字符是ASCII
中的这个字符范围0-47 58-64 91-96 123-127
我真的想将我的代码从白名单转换为BLACKLIST ......但我不知道如何。
我不担心其他语言,因为我真的希望他们通过我的验证... 我只想阻止我想要的ASCII范围内的字符
答案 0 :(得分:3)
虽然我和其他人一起推荐了一个白名单,但是如何使用正则表达式来制作黑名单:
// 0-47 : 00-2F : control codes, spaces, punctuation
// 58-64 : 3A-40 : more punctuation
// 91-96 : 5B-60
// 123-127 : 7B-7F
function verifyChars(str) {
return str.match(/^[^\x00-\x2F\x3A-\x40\x5B-\x60\x7B-\x7F]+$/) != null;
}
这里有一个包含大量测试用例的jsFiddle:http://jsfiddle.net/jfriend00/24xF7/
或更高效一点(因为它仅在启动时评估正则表达式并使用.test()
):
var verifyChars = (function() {
var re = /^[^\x00-\x2F\x3A-\x40\x5B-\x60\x7B-\x7F]+$/;
return function(str) {
return re.test(str);
}
})();
这个与测试用例的比较:http://jsfiddle.net/jfriend00/fZ3AN/
仅供参考,这里有关于如何将不可打印的字符放入正则表达式的良好参考:http://www.regular-expressions.info/characters.html
答案 1 :(得分:0)
更多评论,其他人已经非常清楚地说明为什么在测试允许的字符时,可能比测试排除的字符要简单得多:
> if($("#txtTag").val().length <=0 || $("#txtTag").val() =="") {
据推测,txtTag
是输入或文本区域之类的元素的ID。在这种情况下,值是一个字符串,其长度永远不会小于零。此外,空字符串“”的长度为零,因此它被第一次测试覆盖,因此上述内容可以简单:
if ($("#txtTag").val().length == 0)
然后你有:
> else if(!RegexCheck(/^[a-zA-Z\_]+$/g,$("#txtTag").val())){
您的代码效率更高:
var re = /^[a-zA-Z\_]+$/;
var value = $("#txtTag").val(); // or document.getElementById('txtTag').value
if (value == '') {
// value is blank, do something
) else if (!re.test(value)) {
// value has characters outside the restricted set
}
顺便提一下,如果您将元素的默认值设置为“请输入关键字”,则可以执行以下操作:
var el = document.getElementById('txtTag');
if (el.value == '') {
// nothing has been entered
el.value = el.defaultValue; // reset to 'Please enter keyword"
} else if (...) {