0

我已经尝试使用 jquery 验证插件进行基本的正则表达式验证,但问题是它仅适用于“必需”规则,但不适用于添加方法 regexvalid。如何实现这一目标

提前致谢,

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
     <script type="text/javascript" src="js/jquery-1.9.0.mini.js" > </script>
    <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.0/jquery.validate.js" ></script>
    <script type="text/javascript">
        $(document).ready(function () {
    jQuery.validator.addMethod("regexvalid",function(element,value){
            return this.optional(element)|| /[0-9]*/.test(value);

    });
            $('#logform').validate({
                rules: {
                    txtUsr: {
                        required: true,
                        regexvalid:true

                    },
                    txtPass: {
                        required: true

                    }

                },
                messages: {
                    txtUsr: {
                        required: 'Please enter username',
                        regexvalid:'valid numbers'
                    },
                    txtPass: {
                        required: 'Please enter password'
                    }
                }

            });


        });


    </script>
    <style type="text/css">

.error

{

border-color:Red;

border-style:solid;

border-width:1px;

}

#signupForm label.error {
    margin-left: 10px;
    width: auto;
    display: inline;
}


</style>
</head>
<body>
<div id='LoginDiv' style='width:400px;height:300px;background-color:green;'>
    <form id='logform'>
        User Name : <input type="text" id='txtUsr' name='txtUsr' style='margin-top:12px'/>
        <br/>
        <br/>
        Password : <input type="text" id='txtPass' name='txtPass' /> 
        <br/>
        <br/>
        <input type="submit" id='btnSubmit' value='Submit' />
    </form>
    </div>
</body>
</html>
4

1 回答 1

0

这里有两个问题。

1) 您传递给自定义方法的变量是向后的:

jQuery.validator.addMethod("regexvalid",function(element,value){

根据文档value首先...

jQuery.validator.addMethod("regexvalid",function(value, element){

2) 我不是正则表达式的专家,你还没有解释它应该做什么,但它似乎无效。如果您想测试该值是否为数字,请使用默认number规则。否则,该regexvalid方法本身是有效的,您只需要正确调整您的正则表达式。

这是使用默认number方法中的正则表达式函数作为演示。

jQuery.validator.addMethod("regexvalid", function (value, element) {
    return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(value);
});

演示:http: //jsfiddle.net/ZFd4B/


编辑,关于您的 Regex

您的正则表达式/[0-9]*/.test(value)似乎什么都不做的原因是因为它实际上什么都不做。

  • [0-9]匹配任何数字。

  • *告诉它匹配前面表达式的“零个或多个”。

所以多亏了,不管怎样*,测试总会返回。true[0-9]

你从来没有解释过这个自定义方法应该做什么,但regex你提供的实际上是没有实际意义的,因为它似乎总是满足每个条件。

来源: http ://webcheatsheet.com/php/regular_expressions.php#basics

于 2013-03-29T14:22:06.240 回答