我正在尝试使用正则表达式来测试输入字段中允许的字母和空格。我尝试使用/^[a-zA-Z]*$/
,但这不允许空格。
更新了这个问题。我希望单词之间只有一个空格。 例如,我有一个像新奥尔良这样的城市名称,所以只允许字母和单词之间的空格。
答案 0 :(得分:0)
[a-aA-Z]
字符类和\s
字符类有以下注意事项。
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