2017-06-06 58 views
1
<input type="text" name="address" pattern="[0-9a-zA-Z ,\.\/\-&']{0,}"> 

它會允許所有除了少數特殊字符但我不想'//''///'或任何特殊字符像這樣重複。我應該改變什麼?javascript模式的正則表達式

回答

2

你需要重新寫圖案

pattern="(?:[0-9a-zA-Z]*(?:[ ,./&'-][0-9a-zA-Z]+)*)?" 

見JS演示:

<form> 
 
<input type="text" name="address" pattern="(?:[0-9a-zA-Z]*(?:[ ,./&'-][0-9a-zA-Z]+)*)?"> 
 
<input type="submit"> 
 
</form>

注意^$默認添加,但萬一您正在使用一些其他框架來覆蓋模式屬性,你需要將錨明確添加到模式:

^(?:[0-9a-zA-Z]*(?:[ ,./&'-][0-9a-zA-Z]+)*)?$ 

詳細

  • ^ - 一個可選的非捕獲組匹配1 - 字符串
  • (?:[0-9a-zA-Z]*(?:[ ,./&'-][0-9a-zA-Z]*)*)?開始或0次出現:
    • [0-9a-zA-Z]* - 零個或多個ASCI我字母/數字
    • (?:[ ,./&'-][0-9a-zA-Z]*)* - 0或多次出現的:
      • [ ,./&'-] - 一個空間,,./(無需逃吧!),&'-(不需要逃避它在字符類的結尾,但你可以)
      • [0-9a-zA-Z]+ - 一個或多個 ASCII字母/數字
  • $ - 字符串結尾。
1

您可以添加一個負先行檢查重複:
(?!.*([ ,./&'-])\1)[0-9a-zA-Z ,./&'-]*
這將拒絕與空間,,./&',或者-重複的字符串。