6

次の文字のみを受け入れるテキスト フィールドがあります。

使用できる文字: [az 0-9 + # - .]

これは、質問をするときにSOが「タグ」フィールドで行うフィルターと同じです。ユーザーが無効な文字を入力した場合、現在のテキスト フィールドの値を変更しないでください。私は試した:

$('#post_tags').keypress(function(event){
    var char = String.fromCharCode(event.which)
    var txt = $(this).val()

    if (! txt.match(/[^A-Za-z0-9+#-\.]/)){
        $(this).val(txt.replace(char, ''));
    }
})

うまくいかないのはなぜですか?ありがとう!

4

5 に答える 5

5
/[^A-Za-z0-9+#-\.]/

これにより、これらの文字のいずれかの一致が否定されます。複数の文字に一致させるには、そこで a を使用する必要が+あります。

/[^A-Za-z0-9+#-\.]+/
                  ^

そして、文字列全体を一致させるには、アンカーを追加する必要があります。

/^[^A-Za-z0-9+#-\.]+$/
 ^                  ^

編集:さて、ここでも文字から文字まで-の範囲を作成しているようです。この場合、エスケープするか、最後に置くことができます。#.

/^[^A-Za-z0-9+#\-\.]+$/

/^[^A-Za-z0-9+#\.-]+$/
于 2013-06-20T18:07:51.937 に答える
2

文字を置き換える必要はありません。それを防ぐだけです。

var char = String.fromCharCode(event.which)
if (!char.match(/^[^A-Za-z0-9+#\.\-]+$/)) event.preventDefault();
于 2015-03-20T17:44:23.383 に答える
0

みんな、ありがとう。

実際、私の問題はもう少し難しかった: 無効なキーをフィルタリングし、2 つの異なる方法で有効なキーの ajax 呼び出しを開始する: ユーザーが SPACE/COMMA を押した場合、または入力中に。コードは次のとおりです。

$(document).ready(function(){

$('#post_tags').keypress(function(e){
    var txt = String.fromCharCode(e.which);
    console.log(txt + ' : ' + e.which);

    if(txt.match(/^[^A-Za-z0-9+#\-\.]+$/))
    {
          return false;
    }
})

$('#post_tags').keyup(function(event){
      code = event.which
      var token = String.fromCharCode(code)
      var txt = $(this).val()

              //create a new tag, take it out of textfield
      if (code == 32 || code == 188)
      {
        console.log("AJAX new word keyup")

          $.ajax({
            type: 'get',
            url: '/posts/tags_change',
            dataType: "json",
            data: "query=" + $(this).val(),

            success: function(data) {
            console.log(data)
            $('#post_tags').val('')
            },

            error: function(data) {
                alert("Ajax error")
            }
          });
    }
    else
    {
                    //do autocomplete ajax
        console.log("typing:" + txt)
    }

});

}))

これが 100% 正しいかどうかはわかりません。

于 2013-06-20T19:09:17.067 に答える