【问题标题】:Advice on how to validate names and surnames using regex关于如何使用正则表达式验证姓名和姓氏的建议
【发布时间】:2011-06-10 17:39:24
【问题描述】:

我想为我的 Ruby on Rails 3 应用程序验证 namesurname,因此我发布了 this question。有人建议我阅读Falsehoods Programmers Believe About Names 文章,现在我遇到了麻烦。

验证姓名和姓氏的正确方法是什么?

正则表达式是一种方法,但我应该注意什么?你能给我一个概述吗?

【问题讨论】:

  • 关于你能想出的最全面的正则表达式将是'.*'
  • @Bryan,实际上你可以做得比这更好,因为.* 承认有很多我认为是假名字的东西,比如长度为 0 的(可能)和没有任何打印的其中的字符(如所有退格)。
  • @tchrist:但说真的,你为什么在乎?如果有人希望将自己标识为“^H^H^H”,为什么这很重要?对计算机来说,这一切都只是一点点。
  • @Bryan:因为我希望能够在 Name:         之类的内容之后在页面上添加一些墨水。这就是为什么。

标签: ruby regex ruby-on-rails-3


【解决方案1】:

验证名称的正确方法是:

  1. 接受所有可能的 Unicode 字符。
  2. 拒绝长度为 0 的输入。
  3. 确保结果中至少有一个字符既不是\pM\pZ,也不是\pC;即,既不是组合标记,分隔符,也不是其他(通常是控制)字符。像[^\pM\pC\pZ] 这样的字符类就足够了。

那里:尽可能简单。不过,您可能需要 Ruby 1.9 才能正确执行此操作。

【讨论】:

  • 这似乎正是我所需要的,但是在 Rails 验证器中使用它时,我收到“警告:无效的 Unicode 属性 \p: /[^\pM\pC\pZ]/” -有什么想法吗?
  • u添加到你的exp的末尾:/^[..]$/u
【解决方案2】:

简单的答案是,您无法验证姓名和姓氏,只能验证它们不为空*。通过填写要求姓名的表格,有人在声明“这是我的名字”,如果有人说“这是我的名字”,你应该相信他们,因为他们是他们名字的最终权威。

* 即便如此,人们只有一个名字而不是两个或三个名字是完全有效的,并且有一个人实际上没有名字。他给了自己一个符号。

【讨论】:

    【解决方案3】:

    如果您阅读过那篇文章,您就会发现无论使用或不使用正则表达式,都无法验证名称。

    所以甚至不要去那里。如果人们想称自己为 Tarquin Fin-tim-lin-bin-whin-bim-lim-bus-stop-F'tang-F'tang-Olé-Biscuitbarrel(it has happened! 参见“文化参考”部分),谁你要拒绝他们吗?

    【讨论】:

    • 那是 Mr. Olé-Biscuitbarrel 给你(我认为这将成为我未来最喜欢的化名......)
    • 什么?!你在嘲笑我吗?那是我的名字! :-)
    猜你喜欢
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多