在Python中验证名称

时间:2010-09-28 19:29:13

标签: python regex

对于国际化项目,我必须使用Python验证名称的全局语法(第一个,最后一个)。但缺乏对unicode类的支持实际上是让事情变得更加困难。

是否有任何正则表达式/库可以做到这一点?

示例:

必须接受Björn,Anne-Charlotte,توماس,毛或מיק。 -Björn,Anne - Charlotte,Tom_或像这样的条目应该被拒绝。

有没有简单的方法呢?

感谢。

1 个答案:

答案 0 :(得分:12)

如果指定re.UNICODE标志,Python确实支持正则表达式中的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_]