【问题标题】:How to validate person names? - Python/Django如何验证人名? - 蟒蛇/Django
【发布时间】:2011-07-25 07:32:36
【问题描述】:

我希望为我的一个表单创建一个全名验证器。

不幸的是,我不确定最好的方法是,因为它不像以下那样微不足道:

if not char in string.letters + " .'":
    raise ValidationError("...")

认为正则表达式可以工作,但 \w[:alpha:][a-zA-Z] 并不能真正捕获特殊字符。

名称示例:

  • 铁斯托

  • 玛丽·约瑟夫

  • 玛丽·弗朗索瓦丝

  • 何塞·德·里巴斯


有什么想法吗?

天啊……听起来我打开了一罐虫子!感谢您的精彩回答。

【问题讨论】:

  • 最近有一对夫妇想给他们的孩子取名“4real”。那么为什么需要验证名称?
  • 为什么要限制人们可以使用哪些字符作为他们的名字?例如,某些语言在编写时具有 !在它们中,作为单词的一部分(而不是标点符号)。看来你无缘无故地让自己变得更难了。
  • 放弃吧。您无法验证人们的姓名。没有规则。名称中的数字(如“He3nry”)很少见,但并非不可能或非法。 “艺术家原名王子”是一个相当复杂的名字,他的符号甚至不是Unicode。
  • @Arkadiy:不是“亨利四世国王殿下”吗?
  • @Arkadiy:不可能是我。我的名字无效,中间有一个标点符号。因此,我的名字被追踪斩首的软件拒绝了。

标签: python regex django validation


【解决方案1】:

不要。

请仔细阅读:Falsehoods Programmers Believe About Names

【讨论】:

    【解决方案2】:

    我认为这不是一个好主意。

    您希望排除哪些名称?没有国际允许的名称字符列表,也没有太多理由禁止特定字符。

    【讨论】:

      【解决方案3】:

      我个人不会费心验证名称,我想有很多可能性很难维护。如果你能想出一个正则表达式,我认为它会很通用,不会有效。我认为唯一有价值的是排除 @ # $ % ^ 之类的内容。

      只要确保你正在转义字符,如果某人的名字是 Fooalert('lala'),那很好,但要确保它没有被解析。

      【讨论】:

        【解决方案4】:

        根据您的 python 版本,它可能是您正在寻找的 re.UNICODE?

        http://docs.python.org/library/re.html#re.UNICODE

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-10-28
          • 1970-01-01
          • 1970-01-01
          • 2019-05-17
          • 1970-01-01
          • 2021-02-24
          • 2017-07-17
          • 2015-12-23
          相关资源
          最近更新 更多