Regex 带撇号的城市正则表达式
这是我的javascript正则表达式,用于城市名称,它几乎处理除此之外的所有情况Regex 带撇号的城市正则表达式,regex,validation,Regex,Validation,这是我的javascript正则表达式,用于城市名称,它几乎处理除此之外的所有情况 ^[a-zA-Z]+[\. - ']?(?:[\s-][a-zA-Z]+)*$ (应该通过) 阿莱纳学院 三滩谷 圣托马斯 圣托马斯·文森特 圣托马斯·文森特 圣托马斯·文森特 圣托马斯 水蟒鹿洛奇县酒店 (如果失败) 桑。棕褐色的山谷 圣。。托马斯 圣。。托马斯,文森特 圣托马斯-文森特 圣托马斯 我认为以下regexp符合您的要求: ^([Ss]t\. |[a-zA-Z ]|\['-](?:[^-']
^[a-zA-Z]+[\. - ']?(?:[\s-][a-zA-Z]+)*$
(应该通过)
- 阿莱纳学院
- 三滩谷
- 圣托马斯
- 圣托马斯·文森特
- 圣托马斯·文森特
- 圣托马斯·文森特
- 圣托马斯
- 水蟒鹿洛奇县酒店
- 桑。棕褐色的山谷
- 圣。。托马斯
- 圣。。托马斯,文森特
- 圣托马斯-文森特
- 圣托马斯
- 我认为以下regexp符合您的要求:
^([Ss]t\. |[a-zA-Z ]|\['-](?:[^-']))+$
另一方面,您可能会质疑使用regexp来实现这一点的想法。。。不管您的regexp有多复杂,总会有一些傻瓜找到一个新的不需要的模式来匹配
通常,当您需要有效的城市名称时,最好使用一些地理编码api,如,它匹配第一个列表中的所有名称,而不是第二个列表中的名称:
/^[a-zA-Z]+(?:\.(?!-))?(?:[\s-](?:[a-z]+')?[a-zA-Z]+)*$/
多行解释:
^[a-zA-Z]+ # begins with a word
(?:\.(?!-))? # maybe a dot but not followed by a dash
(?:
[\s-] # whitespace or dash
(?:[a-z]+\')? # maybe a lowercase-word and an apostrophe
[a-zA-Z]+ # word
)*$ # repeated to the end
要在任何地方允许点,但不允许点中的两个,请使用以下命令:
/^(?!.*?\..*?\.)[a-zA-Z]+(?:(?:\.\s?|\s|-)(?:[a-z]+')?[a-zA-Z]+)*$/
^(?!.*?\..*?\.) # does not contain two dots
[a-zA-Z]+ # a word
(?:
(?:\.\s?|\s|-) # delimiter: dot with maybe whitespace, whitespace or dash
(?:[a-z]+\')? # maybe a lowercase-word and an apostrophe
[a-zA-Z]+ # word
)*$ # repeated to the end
试试这个正则表达式:
^(?:[a-zA-Z]+(?:[.'\-,])?\s?)+$
这不符合:
阿莱尼学院新滩谷
圣托马斯
圣托马斯·文森特
圣托马斯·文森特
圣托马斯·文森特
圣托马斯
水蟒鹿洛奇县
圣托马斯山
存储区域网络。棕褐色的山谷
华盛顿特区 但不匹配: 圣。。托马斯
圣。。托马斯--文森特
圣托马斯-文森特
圣托马斯 (我允许它匹配
San.Tan.Valley
,因为可能有一个城市名有两个句号。)
正则表达式的工作原理:
# ^ - Match the line start.
# (?: - Start a non-catching group
# [a-zA-Z]+ - That starts with 1 or more letters.
# [.'\-,]? - Followed by one period, apostrophe dash, or comma. (optional)
# \s? - Followed by a space (optional)
# )+ - End of the group, match at least one or more of the previous group.
# $ - Match the end of the line
你能稍微澄清一下匹配标准吗?为什么要
San。棕褐色的山谷
失败?@willOEM,因为我不知道一个城市有两个句号。好的,但从外面看,我们不知道你想要匹配的内容的上下文。我可以想象,如果您试图解析外部来源或用户提供的内容,San。棕褐色的Valley
可以接受,因为它在语法上没有错误。只要我的两分钱。我为我的项目设置了通过和失败所需的要求。这就是我对正则表达式的建模。圣托马斯山的Monte St.Thomas也失败了,没有一个带破折号的通过?我使用的是无法使其匹配任何内容(将你的正则表达式粘贴到其中,当我尝试将其与其中的正则表达式链接时,此url会断开。)除非我做错了什么,否则它不会使用,我忘记了单词字符后面的一些量词:-/现在应该适用于您问题中的所有情况。但是,圣托马斯山
失败。另外,请你解释一下正则表达式好吗?@Cerbrus:那不在你的列表中。我以为你只想在第一个单词后面加上点?如果你想在任何地方都允许它,但只允许它一次(如其他评论中所述),它会变得复杂得多。我最终不允许使用分隔符。这也匹配了Yan'St-
@Bergi:华盛顿特区。
好吧,我想我们总能找到其他角色不匹配的位置……是的,这样的军备竞赛没有结束:p这让我离得够近了,因为总会有那个,谢谢你的解释。