2012-02-13 66 views
2

我想驗證名稱,其中包含「字母數字字符,支持的符號和空間」。在這裏,我需要只允許一個hyphen(-),但不是雙hyphen(--)無法驗證連字符

這是我的代碼如下:

$.validator.addMethod(
    'alphanumeric_only', 
    function (val, elem) { 
    return this.optional(elem) || /^[^*~<^>+(\--)/;|.]+$/.test(val); 
    }, 
    $.format("shouldn't contain *.^~<>/;|") 
); 

上面的代碼,甚至沒有允許單個hyphen(-)。我如何允許使用單個連字符,但是不要使用雙連字符。任何幫助是極大的讚賞。

回答

6

對於這一點,你需要一個負lookahead assertion

/^(?!.*--)[^*~<^>+()\/;|.]+$/ 

應該這樣做。

說明:

^     # Start of string 
(?!    # Assert it's impossible to match the following: 
.*    # any string, followed by 
--    # two hyphens 
)     # End of lookahead 
[^*~<^>+()\/;|.]+ # Match a string consisting only of characters other than these 
$     # End of string 

這並不是說,如果你的字符串可以包含換行符,這可能會失敗。如果可以,請使用

/^(?![\s\S]*--)[^*~<^>+()\/;|.]+$/ 
+0

太棒了!謝謝@Tim。 – diya 2012-02-13 08:40:43

4

我建議您使用白名單而不是黑名單。然而,這是工作:

 <input type="text" id="validate"/> 
    <script> 
     $('#validate').keyup(function(){ 
      val = this.value; 
      if(/([*.^~<>/;|]|--)/.test(val)) this.style.backgroundColor='red'; 
      else this.style.backgroundColor=''; 
     }); 
    </script> 
+2

+1:很好的選擇(更可讀)。 – 2012-02-13 08:12:58

+0

@core - 感謝您的好評。 – diya 2012-02-13 08:57:22