2012-12-14 30 views
0

在下面的代碼,IAM使用jQuery驗證..jQuery驗證全稱場的正則表達式的概率

的概率只是針對全名現場。當我剛進入一個全名是「湯姆」,它應該告訴我一些錯誤,但它沒有顯示當前...但是當我爲一些「哈利·波特」(或)「哈利 - 波特進入,它不應該出現任何錯誤....

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
    <script type="text/javascript" src="http://jzaefferer.github.com/jquery-validation/jquery.validate.js"></script> 
<script type="text/javascript" src="http://jquery-joshbush.googlecode.com/files/jquery.maskedinput-1.2.1.pack.js"></script> 


    <script> 

      $(document).ready(function() { 

       $('#fullname').focus(); 

       var validCharactersRegex = new RegExp(/^[a-z -]+$/); 
       var doesNotStartWithDashOrSpace = new RegExp(/^[^ -]/); 
       var fullname_invalid = function(value) { 
        return validCharactersRegex.test(value) && doesNotStartWithDashOrSpace.test(value) && value.indexOf(' ') == -1 && value.indexOf('--') == -1 && value.indexOf(' -') == -1 && value.indexOf('- ') == -1; 
       } 


       $.validator.addMethod("custom_fullname", function(value, element) { 
        return fullname_invalid(value); 
       }, 'Your Name should be entered like: "blahblah"'); 

       $('#signup').validate({ 
        rules: { 
         fullname: { 
          required: true, 
          custom_fullname: true 
         },     
         email: { 
          required: true, 
          email: true 
         } 
        }, 


        messages: { 
         fullname : { 
          required: "Please specify your Full Name",    
          custom_fullname : "Your Name should be entered like: fullname lastname (or) fullname-lastname" 
         }, 
         email: { 
          required: "We need your email address to contact you", 
          email: "Your email address must be in the format of [email protected]" 
         } 
        } 


       }); 

       $('#signup').on('submit', function(event) { 
        event.preventDefault(); 
       }); 


      $("#phone").mask("(9999) 9999999"); 

      }); 

       </script> 


     <style> 
       .error {color: red;} 
     </style> 


</head> 




<body> 

    <form id="signup" action="/action"> 

     Full Name: <input name="fullname" type="text" maxlength="14" /><br/> 
     Email <input id="email" name="email" size="25" class="required email" /><br/> 
     Telephone Number: <input type="text" name="phone" id="phone" /><br/> 


    Select Country: <select> 
      <option value="South Yorkshire" selected>South Yorkshire</option> 
      <option value="Rest of England">Rest of England</option> 
      <option value="Wales, Scotland">Wales, Scotland</option> 
      <option value="Northern Ireland">Northern Ireland</option> 
      <option value="European Union">European Union</option> 
      <option value="Rest of World">Rest of World</option> 
      <option value="Other">Other</option> 
    </select><br/> 


     <input type="submit"> 

    </form> 

</body> 
</html> 


請親屬DLY檢查有人..

+0

您的正則表達式只允許使用小寫字母。 – Barmar

+0

你可以結合你的兩個正則表達式:/^[a-z] [ - a-z] + $/ – Barmar

+0

你的代碼很混亂。該函數的名稱是fullname_ ** invalid **。但是正則表達式檢查**有效的**名稱,而'indexOf()'檢查是針對**無效的**名稱。 – Barmar

回答

1

下面是如何在一個單一的正則表達式做的一切:

var validCharactersRegex = /^[a-z][- a-z]*[- ]{2}[- a-z]*[a-z]$/i; 
function fullname_valid(value) { 
    return validCharactersRegex.test(value); 
} 

$.validator.addMethod("custom_fullname", function(value, element) { 
    return fullname_valid(value); 
}, 'Your Name should be entered like: "blahblah"'); 

這就要求它以字母開頭,結尾字母,只包含字母,空格和破折號,並在其中有一個空格,短劃線,空格或破折號空格的分隔符。

請參閱FIDDLE

+0

嗨巴爾默,對不起,以前我給錯誤的信息...其實我需要的是:當我剛剛進入一個FullName作爲「湯姆」時,它應該顯示我一些錯誤,但它目前沒有顯示...當我作爲一些'哈利波特'(或)'哈利波特'進入時,它不應該顯示任何錯誤.... – Clarsen

+0

所以,你可以請再次更改value:validCharactersRegex ?? – Clarsen

+0

我的版本給湯姆一個錯誤,哈利波特沒有錯誤如果你只需要一個空格或連字符之間的連字符,改變'[ - ] {2}'只是'[ - ]'。如果你不允許大寫,刪除'i'修飾符。 – Barmar