在Python中验证名字

2 投票
1 回答
3790 浏览
提问于 2025-04-16 04:43

在一个国际化的项目中,我需要用Python来验证名字(名和姓)的全球语法。但是,缺少对unicode字符类别的支持让事情变得更加困难。

有没有什么正则表达式或库可以做到这一点呢?

举个例子:

像Björn、Anne-Charlotte、توماس、毛,或者מיק这样的名字都应该被接受。

但是像-Björn、Anne--Charlotte、Tom_这样的名字 应该 被拒绝。

有没有简单的方法可以做到这一点呢?

谢谢。

1 个回答

13

Python在正则表达式中确实支持unicode,只要你指定了 re.UNICODE 这个标志。你可以用类似下面的方式来实现:

r'^[^\W_]+(-[^\W_]+)?$'

测试代码:

# -*- coding: utf-8 -*-
import re

names = [
            u'Björn',
            u'Anne-Charlotte',
            u'توماس',
            u'毛',
            u'מיק',
            u'-Björn',
            u'Anne--Charlotte',
            u'Tom_',
        ]

for name in names:
    regex = re.compile(r'^[^\W_]+(-[^\W_]+)?$', re.U)
    print u'{0:20} {1}'.format(name, regex.match(name) is not None)

结果:

Björn                True
Anne-Charlotte       True
توماس                True
毛                    True
מיק                  True
-Björn               False
Anne--Charlotte      False
Tom_                 False

如果你还想在名字中禁止使用数字,那么可以把 [^\W_] 改成 [^\W\d_],在两个地方都要这样改。

撰写回答