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 对象,使用 new RegExp()...

尝试:

var reg = new RegExp('^([A-Za-z])$');
于 2012-11-22T14:28:48.137 回答
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/

此外,您当前的正则表达式只允许输入中的一个字符,如果这不是您想要的效果,请将您的正则表达式更改为/^([A-Za-z]+)$/

更新:

“在任何字母数字上”所固有的问题是双重的。

首先,您的正则表达式只允许字母,而不是数字。

其次,如果您只验证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,这是无效的,因为它包含 a 1,但您的验证例程通过了它,因为最后输入的字符是 an n,这是有效的。

您最好验证输入中的整个字符串。为此,请更改您的正则表达式以+在您的字符类之后包含一个量词:

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

更新小提琴:http: //jsfiddle.net/X3ZDQ/1/

于 2012-11-22T14:34:38.653 回答