正则表达式 - 不重复句号、逗号和连字符
Regex - No repeation of period and comma and hyphen
我正在尝试为地址创建一个正则表达式。
我目前有 [a-zA-Z0-9-\.\-\,\-\s\n]
,但它匹配重复句号、重复连字符和重复逗号。有什么方法可以将逗号、连字符和句点的数量限制为 1 个?
它应该匹配 "5432 Lorem St. Tokyo, Japan 1234-54"
它不应该匹配 "5323 Dolor Ave... Kyoto,,,, Japan 555-33----33"
[^a-zA-Z0-9-\.-\,\-\s\n][a-zA-Z0-9-\.-\,\-\s\n][^a-zA-Z0-9-\.-\,\-\s\n]
是冗长的,但会匹配那些没有(^
)的元素中的一个在它的任何一侧都有另一个。那是你想要的吗?
要禁止 "comma"、"dot" 或 "hyphen" 集中的重复字符,您可以使用锚定在开头的否定前瞻:
/^(?!.*([.,-]))[a-zA-Z0-9\s.,-]+$/.test(str)
^^^^^^^^^^^^^^^
(?!.*([.,-]))
前瞻检查是否存在重复的逗号、点或连字符(参见 ([.,-])
- 捕获组后跟反向引用),如果找到则匹配失败。
此外,要禁止部分匹配,锚点 - ^
用于字符串的开头和 $
用于字符串的结尾 - 是必需的。
这样的怎么样?
^([a-zA-Z0-9\s\n]|(([\.,-])(?!)))*$
因此,这会匹配任何仅包含任意数量的字母、数字、空格或行空格或句点、逗号或连字符的字符串,而这些字符串本身并没有紧跟其后。
我正在尝试为地址创建一个正则表达式。
我目前有 [a-zA-Z0-9-\.\-\,\-\s\n]
,但它匹配重复句号、重复连字符和重复逗号。有什么方法可以将逗号、连字符和句点的数量限制为 1 个?
它应该匹配 "5432 Lorem St. Tokyo, Japan 1234-54"
它不应该匹配 "5323 Dolor Ave... Kyoto,,,, Japan 555-33----33"
[^a-zA-Z0-9-\.-\,\-\s\n][a-zA-Z0-9-\.-\,\-\s\n][^a-zA-Z0-9-\.-\,\-\s\n]
是冗长的,但会匹配那些没有(^
)的元素中的一个在它的任何一侧都有另一个。那是你想要的吗?
要禁止 "comma"、"dot" 或 "hyphen" 集中的重复字符,您可以使用锚定在开头的否定前瞻:
/^(?!.*([.,-]))[a-zA-Z0-9\s.,-]+$/.test(str)
^^^^^^^^^^^^^^^
(?!.*([.,-]))
前瞻检查是否存在重复的逗号、点或连字符(参见 ([.,-])
- 捕获组后跟反向引用),如果找到则匹配失败。
此外,要禁止部分匹配,锚点 - ^
用于字符串的开头和 $
用于字符串的结尾 - 是必需的。
这样的怎么样?
^([a-zA-Z0-9\s\n]|(([\.,-])(?!)))*$
因此,这会匹配任何仅包含任意数量的字母、数字、空格或行空格或句点、逗号或连字符的字符串,而这些字符串本身并没有紧跟其后。