城市名称的正则表达式

Man*_*sah 6 regex city

我需要一个正则表达式验证城市textBox,城市文本框字段只接受字母,空格和短划线( - ).

小智 26

这个答案假定@Manaysah所指的字母也包含使用变音符号.我添加了单引号,因为加拿大和法国的许多名字都有.我还添加了句点(点),因为它是签约名称所必需的.

基于@UIDs答案,我提出了,

^([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
------
*******
&&
()
//
\\
Run Code Online (Sandbox Code Playgroud)

我没有添加使用括号和其他标记,因为它不属于这个问题的范围.

因为空白,我远离了\ s.标签和换行符不是城市名称的一部分,不应在我看来使用.

  • 如果城市包含数字,这不起作用...例如"NICE CEDEX 1" (3认同)
  • ^([a-zA-Z\u0080-\u024F]+(?:(\. )|-| |'))*[a-zA-Z\u0080-\u024F]*$ 应该是 (\. ) 而不仅仅是“.”,因为 . 是一个特殊字符 (2认同)

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]`替换为`\p{L}`这是我的版本:`^\p{Lu}\p{L}*(?:[\s -]\p{Lu}\p{L}*)*$` (2认同)

UID*_*UID 5

如果有人在搜索城市名称的正则表达式时需要它,请添加我的答案,就像我做的那样

请使用这个:

^[a-zA-Z\u0080-\u024F\s\/\-\)\(\`\.\"\']+$
Run Code Online (Sandbox Code Playgroud)

许多城市名称包含破折号,例如田纳西州的Soddy-Daisy,或者像加州LaCañadaFlintridge那样的特殊字符

希望这可以帮助!