小智 26
这个答案假定@Manaysah所指的字母也包含使用变音符号.我添加了单引号,因为加拿大和法国的许多名字都有.我还添加了句点(点),因为它是签约名称所必需的.
基于@UIDs答案,我提出了,
Run Code Online (Sandbox Code Playgroud)^([a-zA-Z\u0080-\u024F]+(?:. |-| |'))*[a-zA-Z\u0080-\u024F]*$
它接受的城市列表:
Run Code Online (Sandbox Code Playgroud)Toronto St. Catharines San Fransisco Val-d'Or Presqu'ile Niagara on the Lake Niagara-on-the-Lake München toronto toRonTo villes du Québec Provence-Alpes-Côte d'Azur Île-de-France Kópavogur Garðabær Sauðárkrókur Þorlákshöfn
它拒绝的是什么:
Run Code Online (Sandbox Code Playgroud)A----B ------ ******* && () // \\
我没有添加使用括号和其他标记,因为它不属于这个问题的范围.
因为空白,我远离了\ s.标签和换行符不是城市名称的一部分,不应在我看来使用.
pca*_*cao 21
这可能是任意复杂的,取决于您需要匹配的精确程度,以及您愿意允许的变化.
一些相当简单的东西^[a-zA-Z]+(?:[\s-][a-zA-Z]+)*$应该可行.
警告:这与München等城市不匹配,但在这里你基本上需要使用表达式的[a-zA-Z]部分,并定义你的特定情况允许的字符.
请记住,它也允许像San ---- Francisco这样的东西,或者有几个空格.
转换为类似:1个或多个字母,后跟一个块:0或更多空格或破折号和更多字母,最后一个块可以出现0次或更多次.
奇怪的东西在那里:?:有点.如果你不熟悉正则表达式,它可能会让人感到困惑,但这只是表明括号之间的正则表达式不是捕获组(我不想捕获它匹配的部分以便以后重用),所以括号仅用于对表达式进行分组(而不是捕获匹配项).
"New York" // passes
"San-Francisco" // passes
"San Fran Cisco" // passes (sorry, needed an example with three tokens)
"Chicago" // passes
" Chicago" // doesn't pass, starts with spaces
"San-" // doesn't pass, ends with a dash
Run Code Online (Sandbox Code Playgroud)
如果有人在搜索城市名称的正则表达式时需要它,请添加我的答案,就像我做的那样
请使用这个:
^[a-zA-Z\u0080-\u024F\s\/\-\)\(\`\.\"\']+$
Run Code Online (Sandbox Code Playgroud)
许多城市名称包含破折号,例如田纳西州的Soddy-Daisy,或者像加州LaCañadaFlintridge那样的特殊字符
希望这可以帮助!