-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 に答える