对于国际化项目,我必须使用 Python 验证名称(名字、姓氏)的全局语法。但缺乏对 unicode 类的支持确实让事情变得更难了。
是否有任何正则表达式/库可以做到这一点?
例子:
必须接受 Björn、Anne-Charlotte、توماس、毛或 מיק。 -Björn、Anne--Charlotte、Tom_ 或类似的条目应该被拒绝。
有什么简单的方法可以做到这一点吗?
谢谢。
最佳答案
如果您指定 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_]
。
关于python - 在 Python 中验证名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3816332/