python - 在 Python 中验证名称

标签 python regex

对于国际化项目,我必须使用 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/

相关文章:

python - 从日期到字符串的 Pyspark 类型转换问题

Python Unicode 转换

Javascript RegEx .match() 与 $1、$2 等选择器

PHP 正则表达式 - 从字符串的开头和结尾匹配

python - 写入文件不会自动刷新内容并导致 Python 内存不足

python os.system 似乎无缘无故挂起

python - 标准库中的 PEP 257 文档字符串修剪?

python - 在 Cython 中使用 regex.h C 库

正则表达式匹配所有 unicode 引号

regex - Delphi提取2个标签之间的字符串