一个验证规则是否会抑制jquery验证插件中的其他验证规则?

时间:2011-08-12 11:21:42

标签: jquery regex jquery-validate

我有以下代码

<html>
<head>
<title>Untitled Document</title>
<script type="text/javascript" src="js/jquery-1-4-2.js"></script>
<script type="text/javascript" src="js/jquery_validate.js"></script>
<script type="text/javascript">

$(document).ready(function(){

$("#form1").validate({
    rules: {
            fld1: {
                methodtwo: true,
                methodone: true
            }
           },
    messages: {
        fld1: {
            methodtwo: "<br> 2Wrong Project Name.",
            methodone: "<br> 1Wrong Project Name."

              }
        }

      });
});   

$.validator.addMethod('methodone', function (value) { 
    return /^[a-zA-Z0-9]+$/.test(value); 
}, 'wrong1.');

$.validator.addMethod('methodtwo', function (value) { 
    return /^[a-zA-Z^0-9]+$/.test(value); 
}, 'wrong2.');



</script> 


</head>
<body>
<form  id="form1"name="form1" action="" method="get">
<table width="80%"  border="0">
  <tr>
  <td><input type="text" name="fld1" id="idfld1"></td>
</tr>
 <tr>
 <td><input type="submit" name="submit" id="idsubmit"></td>
</tr>
</table>
</form>
</body>
</html>

执行上面的代码后,我希望如果我们输入

  1. 字母a-zA-z然后它将接受输入并接受
  2. 任何特殊字符,它会显示错误并显示错误
  3. 但是当我们输入数字0-9时我期待它会显示methodtwo的错误信息。但它接受了它。
  4. 请解释一下为什么会这样?正如我正在检查如果两个相反的验证规则应用于一个字段会发生什么。

    请解释一下我的朋友这个代码有什么问题,或者一个验证规则会压制另一个吗?

    谢谢!

2 个答案:

答案 0 :(得分:1)

^仅在字符类中的第一个字符时表示“not”。在任何其他位置,它表示文字^

所以你可能想要

/^\D+$/
方法2的

。(\D表示“除数字之外的任何字符”,并且已包含a-zA-Z。)

然而,我不确定你真正想要做什么。你可以将所有这些规则组合成一个单一的正则表达式(但是目前它们确实相互矛盾,所以它有点令人费解。)

答案 1 :(得分:1)

正如Tim正确指出的那样,^插入符只是字符类中第一个字符的元字符。

在编写正则表达式时,有一点可以帮助用英语(或您选择的母语)写出正则表达式匹配的内容。让我们用你的两个正则表达式做到这一点:

第一个正则表达式: /^[a-zA-Z0-9]+$/表示:“在字符串的开头匹配一个或多个可以是字母或数字的字符,然后匹配结束字符串“

第二个正则表达式: /^[a-zA-Z^0-9]+$/表示:“在字符串的开头匹配一个或多个可以是字母的字符,^插入符号,或者一个数字,然后匹配字符串的结尾。“

当你拼写出这样的错误时,你的错误就会立即显现出来。对于第二个正则表达式,您只需要从允许的字符类中删除数字表达式,如下所示:

新的正则表达式: /^[a-zA-Z]+$/表示:“在字符串的开头匹配一个或多个字母字符,然后匹配字符串的结尾。”