使用Python regex验证名称

Validate name using Python regex

如果名称有效,我想返回true。名称可以包含:

  • 大写或小写字符
  • 没有数字或特殊字符
  • 可以是一个或两个词,中间只有一个空格
  • 名字和姓氏可以在2-25个字符之间
  • 如。

    • John Smith为真
    • John为真
    • John为真
    • John Sm1th为假
    • John $mith=假
    • J0hn=假
    • John Smith=false(名称之间有两个空格)

    这是到目前为止我的代码。它失败了一些测试用例。

    1
    2
    3
    4
    5
    6
    import re

    if re.findall('[A-Za-z]{2,25}\s[A-Za-z]{2,25}', string):
        print("true")
    else:
        print("false")


    要匹配一个或两个单词,您需要使名字或姓氏可选,还需要锚定以确保不部分匹配,或者使用re.fullmatch而不是re.findall

    1
    2
    3
    4
    5
    lst = ['John Smith', 'John', 'JoHn', 'John Sm1th', 'John $mith', 'J0hn', 'John  Smith']

    import re
    [re.fullmatch('[A-Za-z]{2,25}( [A-Za-z]{2,25})?', x) for x in lst]
    # [<_sre.SRE_Match object; span=(0, 10), match='John Smith'>, <_sre.SRE_Match object; span=(0, 4), match='John'>, <_sre.SRE_Match object; span=(0, 4), match='JoHn'>, None, None, None, None]

    将结果转换为bool:

    1
    2
    [bool(re.fullmatch('[A-Za-z]{2,25}( [A-Za-z]{2,25})?', x)) for x in lst]
    # [True, True, True, False, False, False, False]


    '[A-Za-z]{2,25}||\s[A-Za-z]{2,25}'应该可以。可以在以下位置测试正则表达式:https://pythex.org网站/