任何人都可以指导我关于这个jquery reg exp验证

时间:2012-11-22 14:21:53

标签: jquery-ui jquery jquery-plugins

这是我的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"/>

我该怎么做呢?提前谢谢。

2 个答案:

答案 0 :(得分:0)

您需要使用新的RegExp()...

创建一个RegExp对象

尝试:

var reg = new RegExp('^([A-Za-z])$');

答案 1 :(得分: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]+)$/

<强>更新

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

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

其次,如果您只验证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,这是有效的。< / p>

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

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

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