【发布时间】:2014-11-08 19:57:51
【问题描述】:
我正在尝试验证用户名输入。应该有一个名字和姓氏(所有字母字符),每个都以一个大写字母开头,两个名字之间有一个空格,没有别的。这是我的示例代码:
my $name = "John Smith";
if ( $name !~ /([A-Z]{1})([a-z]+)(\s)([A-Z]{1})([a-z]+){1}/g){
print "No Match!";
}else{
print "Match!";
}
问题是,这与“John Smith”或“John Smith Joe”匹配。我看不出我的模式如何允许第二个名称中最后一组小写字母之后的任何内容,但确实如此。我错过了什么?
谢谢!
【问题讨论】:
-
这出现在编辑队列中,所以我会在几年后停下来告诫人们不要接受这个任务。在现实世界中,您会发现许多名称不适合此任务,并且没有简单的解决方案。请参阅kalzumeus.com/2010/06/17/…、design-system.service.gov.uk/patterns/names 以及其他各种内容。最值得注意的是,这里没有解决方案可以处理两个名字或任何连字符的名称。