正则表达式验证格式正确、以 Sr 或 Jr 结尾的人名

问题描述 投票:0回答:1

我正在尝试创建一个与人名匹配的 Perl 正则表达式。当名称以 Sr 或 Jr 结尾时,其格式正确,以逗号和空格开头,并以句点结尾。

例如:

Should match:
John Smith
John Smith, Sr.
John Smith, Jr.

Should not match:
John Smith Sr
John Smith, Sr
John Smith, SR.
John Smith Sr.
John Smith, John Smith Sr.
John Smith-

还必须正确大写,即 Sr 或 Jr,而不是 sr、SR、sR、jr、JR 或 jR。 名称不应以任何标点符号结尾,使用 Sr 或 Jr 的句点除外。

我试过了

^(?!.(Jr|Sr)(?<!,\sJr.)(?<!,\sSr.)$).$

但是上面的正则表达式允许使用几个不可接受的名称,即 约翰·史密斯, 老约翰·史密斯

然后我发现:

^([A-Za-z]+['-]?[A-Za-z]\s)([A-Za-z]+['-]?[A-Za-z]*)(,\s(Jr|Sr).)?$ 

但它允许名称以连字符结尾,John Smith-,这是不可接受的。

regex perl
1个回答
0
投票

我想下面的表达方式应该能满足你的要求:

^[A-Za-z -]+(, (Jr|Sr)\.)?(?<! Sr| Jr |-)$

它的工作原理如下:

^[A-Za-z -]+ = 行首有一个或多个字母、空格或连字符

(, (Jr|Sr).)? = 可选地后跟“, Sr.”或“,小”

(?

您可以在https://regex101.com/r/q1CVCT/1

查看正在运行的正则表达式
© www.soinside.com 2019 - 2024. All rights reserved.