字母加空格的正则表达式

时间:2014-06-24 21:50:59

标签: regex

我正在尝试使用正则表达式来测试输入字段中允许的字母和空格。我尝试使用/^[a-zA-Z]*$/,但这不允许空格。

更新了这个问题。我希望单词之间只有一个空格。 例如,我有一个像新奥尔良这样的城市名称,所以只允许字母和单词之间的空格。

2 个答案:

答案 0 :(得分:0)

[a-aA-Z]字符类和\s字符类有以下注意事项。

如果您希望接受Unicode,

a-zA-Z可能限制性太强,在这种情况下,\ p {Alpha}将是更好的字符类。

\s可能过于宽松或过于严格,具体取决于正则表达式运行的Unicode或ASCII语义。您可能只想在字符类中放置一个空格。

如果我们知道什么语言以及您是否打算使用Unicode语义,那可能会有所帮助。事情并不像他们在仅使用ASCII的日子那样简单。

<强>更新

这是一个更强大的解决方案仍然具有原始的Unicode警告,但允许单词之间的单个空格字符,而不是其他地方。

use strict;
use warnings;

my @cities = (
  'New Orleans',
  'New Jersey',
  'Salt Lake City',
  'Sacramento',
  ' Leading space',
  'Trailing space ',
  'Two  consecutive spaces',
  '  Two leading spaces',
  'Two trailing spaces  ',
);

foreach my $city ( @cities ) {
  print "<<$city>>: ";
  if( $city =~ m/^[a-zA-Z]+(?:\s[a-zA-Z]+)*$/ ) {
    print "match\n";
  }
  else {
    print "reject\n";
  }
}

答案 1 :(得分:0)

匹配由单个空格分隔的多个字母组。

(\w+ )+\w