我正在尝试为地址创建一个正则表达式。
我目前有[a-zA-Z0-9-\\.\-\,\\-\s\n]
,但它与重复时段,重复连字符和重复逗号相匹配。有什么办法可以将逗号,连字符和句点的数量限制为1吗?
它应匹配"5432 Lorem St. Tokyo, Japan 1234-54"
且不应与"5323 Dolor Ave... Kyoto,,,, Japan 555-33----33"
答案 0 :(得分:2)
要禁止使用"逗号","点"或"连字符"中的重复字符,您可以使用在开始时锚定的负前瞻:
/^(?!.*([.,-])\1)[a-zA-Z0-9\s.,-]+$/.test(str)
^^^^^^^^^^^^^^^
(?!.*([.,-])\1)
前瞻检查是否有重复的逗号,点或连字符(请参阅([.,-])\1
- 捕获组后跟反向引用),如果找到则匹配失败。
另外,要禁止部分匹配,必须使用锚点 - ^
表示字符串的开头,$
表示字符串的结尾。
答案 1 :(得分:0)
[^a-zA-Z0-9-\.-\,\-\s\n][a-zA-Z0-9-\.-\,\-\s\n][^a-zA-Z0-9-\.-\,\-\s\n]
是啰嗦的,但会匹配那些没有(^
)在其两侧有另一个元素的元素中的一个。这样做你想要的吗?
答案 2 :(得分:0)
这样的事情怎么样?
^([a-zA-Z0-9\s\n]|(([\.,-])(?!\3)))*$
所以这匹配任何只包含任意数量的字母,数字,空格或行空格的字符串或者不会立即跟随的句号,逗号或连字符。