2013-03-28 35 views
0

我試過使用jquery驗證插件進行基本的正則表達式驗證,但事情是它只適用於規則'required',但不適用於add方法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> 
+0

你期望你的正則表達式做什麼?換句話說,你試圖創建的規則應該是什麼樣的測試? – Sparky

回答

0

這裏有兩個問題。

1)您傳遞到您的自定義方法的變量是向後

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

As per documentationvalue至上...

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

2)我沒有專家與正則表達式,,你還沒有解釋它應該做什麼,但它似乎不是有效的。如果您想測試該值是否爲數字,請使用the default number rule。否則,regexvalid方法本身正在工作,你只需要適當調整你的正則表達式。

這是使用默認number方法中的正則表達式函數作爲演示。

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

DEMO:http://jsfiddle.net/ZFd4B/


編輯,關於你的正則表達式

您正則表達式,/[0-9]*/.test(value)似乎什麼也不做的原因是因爲它實際上什麼都沒做。

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

  • *告訴它匹配上述表達式的「零或更多」。

所以感謝*,測試將始終返回true不管[0-9]

你從來沒有解釋過這種自定義方法應該做什麼,但你提供的regex是有效的,因爲它似乎總是滿足所有條件。

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