2017-06-06 81 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 ,./&'-]*
这将拒绝与空间,,./&',或者-重复的字符串。