<input type="text" name="address" pattern="[0-9a-zA-Z ,\.\/\-&']{0,}">
它将允许除少数特殊字符外的所有字符,但是我不希望'//''///'或类似的任何特殊字符重复。我应该改变什么?
最佳答案
您需要将模式重写为
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>
请注意,默认情况下添加了
^
和$
,但是如果您使用的是覆盖pattern属性的其他框架,则需要将锚点明确添加到pattern中:^(?:[0-9a-zA-Z]*(?:[ ,./&'-][0-9a-zA-Z]+)*)?$
细节:
^
-字符串的开头(?:[0-9a-zA-Z]*(?:[ ,./&'-][0-9a-zA-Z]*)*)?
-一个可选的非捕获组,匹配以下情况的1或0:[0-9a-zA-Z]*
-零个或多个ASCII字母/数字(?:[ ,./&'-][0-9a-zA-Z]*)*
-0次或多次出现:[ ,./&'-]
-空格,,
,.
,/
(无需转义!),&
,'
或-
(无需在字符末尾转义)课,但可以)[0-9a-zA-Z]+
-一个或多个ASCII字母/数字$
-字符串结尾。关于javascript - javascript模式的正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44394371/