在Python中验证名字
在一个国际化的项目中,我需要用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_]
,在两个地方都要这样改。