Regex 验证城市字段的正则表达式

Regex 验证城市字段的正则表达式,regex,Regex,我正在创建一个正则表达式来验证城市字段。使用以下代码,我只能验证带有一个空格的城市字段: Pattern pattern_ = Pattern.compile("^[a-zA-Z]+(?:[\\s-][a-zA-Z]+)*$"); 关于如何改进正则表达式以验证具有多个空格的城市字段,有什么建议吗 最后,我使用这个regexp: Pattern pattern_ = Pattern.compile("^[a-zA-Z]+(?:(?:\\s+|-)[a-zA-Z]+)*$"); 但现在我遇到了口

我正在创建一个正则表达式来验证城市字段。使用以下代码,我只能验证带有一个空格的城市字段:

Pattern pattern_ = Pattern.compile("^[a-zA-Z]+(?:[\\s-][a-zA-Z]+)*$");
关于如何改进正则表达式以验证具有多个空格的城市字段,有什么建议吗

最后,我使用这个regexp:

Pattern pattern_ = Pattern.compile("^[a-zA-Z]+(?:(?:\\s+|-)[a-zA-Z]+)*$");
但现在我遇到了口音问题,如何将口音添加到我的城市字段?

试试:

Pattern pattern_ = Pattern.compile("^[a-zA-Z\\s-]+$");

使用替换而不是字符类:

Pattern pattern_ = Pattern.compile("^[a-zA-Z]+(?:(?:\\s+|-)[a-zA-Z]+)*$");

最简单的方法是:

^[a-zA-Z\s-]+$
或者,如果愿意,也可以这样做,这将确保字符串不会以空格或连字符开头或结尾:

^[a-zA-Z][a-zA-Z\s-]+[a-zA-Z]$
当然,不要忘记在Java中转义\


你能添加你作为标签使用的语言吗?还有,这是哪种人类语言?你接受吗北京? 杜塞尔多夫怎么样?萨翁河畔的维勒弗兰奇和特伦特河畔的斯托克怎么样?或者犹他州的小卡顿伍德溪谷?这些验证只会让某些人无法使用你的网站。不要用它们,正则表达式不适合你的需要。如果你真的需要验证城市名称,你应该找到一个列出城市名称的数据库,然后检查是否可以在数据库中找到用户输入的城市名称。在你可以编写正则表达式之前,你必须能够用英语描述你正试图实现的规则。第一个数据库接受例如--,第二个A--B-两者都不是有效的城市名称。@thg435 A 20个空格的B似乎也不是特别有效的城市名称。@thg435如果您只想允许使用有效的城市名称,请对照现有城市列表进行验证。@Killercam您是一个真正的赞助者,+1。这部分在做什么??:\\s+|-@JohnMerlino:?:。。。是一个非捕获组用于进行替换\\s是包含所有空白字符的字符类。?:?:\\S+-[-ZA-Z] +意味着:前面有一个或多个空白字符的字母,或者-A,如果你考虑几十个标签和空间字符,有几个随机连字符是一个有效的城市名称。
Pattern pattern_ = Pattern.compile("^[a-zA-Z][a-zA-Z\\s-]+[a-zA-Z]$");