0

これは私のjQueryコードです:

$(document).ready(function(e) {
    $('#step1 #fName').focus(function() {
        $('#step1 #fName').keyup(function() {
            var reg = /^([A-Za-z])$/;
            var check = $('#step1 #fName').val();

            if (reg.test(check) == true || check.match(reg) == true) {
                $('#step1 #fName').css('border',' 1px solid #CCC'); 
            }
            else {
                $('#step1 #fName').css('border',' 1px solid #b20000');  
            }
        });
    });
});

そして、この HTML タグに jQuery 検証を適用したいと思います。

<input type="text" class="width-260" id="fName"/>

どうすればこれを行うことができますか?前もって感謝します。

4

2 に答える 2

0

リテラル RegExp 作成を使用できますが、イベントでkeyupハンドラーを割り当てたくありませんfocus

$(document).ready(function (e) {
    var keyupHandler = function () {
            var self = $(this),
                reg = /^([A-Za-z])$/,
                check = self.val(),
                matches = reg.test(check) || check.match(reg),
                border = matches ? '1px solid #CCC' : '1px solid #b20000';
            self.css('border', border)
        };
    $('#step1 #fName').keyup(keyupHandler).focus();
});​

実際のデモ: http://jsfiddle.net/X3ZDQ/

また、現在の正規表現では、入力に1文字しか使用できません。それが目的の効果でない場合は、正規表現を次のように変更してください/^([A-Za-z]+)$/

アップデート:

「任意の英数字」に固有の問題は 2 つあります。

まず、正規表現は数字ではなく英字のみを許可します。

第 2 に、イベントで単一の文字のみを検証するkeyup場合、検証によって誤検知が発生します。

経時的な例:

a       //a is valid
an      //n is valid
an1     //1 is not valid, so border changes to red
an1n    //n is valid, so border changes back to grey

最終値は ですan1n。これは が含まれているため有効ではありません1が、最後に入力された文字nが有効な であったため、検証ルーチンはそれを渡します。

入力内の文字列全体を検証する方がはるかに優れています。+これを行うには、文字クラスの後に数量詞を含めるように正規表現を変更します。

/^([A-Za-z]+)$/

更新されたフィドル: http://jsfiddle.net/X3ZDQ/1/

于 2012-11-22T14:34:38.653 に答える
0

new RegExp() を使用して RegExp オブジェクトを作成する必要があります...

試してみてください:

var reg = new RegExp('^([A-Za-z])$');
于 2012-11-22T14:28:48.137 に答える