-2

正如其他人建议的“创建白名单”,但我真的很想创建一个黑名单。这是我的代码

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

我真的很想将我的代码从白名单反转为黑名单......但我不知道如何。

我不担心其他语言,因为我真的希望它们通过我的验证......我只想阻止我想要的 ASCII 范围内的字符

4

2 回答 2

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

这个带有测试用例的jsFiddle:http: //jsfiddle.net/jfriend00/fZ3AN/

仅供参考,这是关于如何将不可打印的字符放入正则表达式的一个很好的参考:http ://www.regular-expressions.info/characters.html

于 2012-04-23T03:19:31.873 回答
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 (...) {
于 2012-04-23T03:31:27.047 回答