正则表达式的全名

时间:2011-08-09 06:37:01

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

我最近在表单中收到了很多名字条目。虽然也许我应该有2个单独的名字和姓氏字段,但这在我看来总是有点多。但我想尝试获得一个全名,基本上只能通过至少有一个空格来确定。

我想出了这个,但我想知道是否有人有更好的,可能更简单的解决方案?

/([a-zA-ZàáâäãåèéêëìíîïòóôöõøùúûüÿýñçčšžÀÁÂÄÃÅÈÉÊËÌÍÎÏÒÓÔÖÕØÙÚÛÜŸÝÑßÇŒÆČŠŽ∂ð,.'-]{2,}) ([a-zA-ZàáâäãåèéêëìíîïòóôöõøùúûüÿýñçčšžÀÁÂÄÃÅÈÉÊËÌÍÎÏÒÓÔÖÕØÙÚÛÜŸÝÑßÇŒÆČŠŽ∂ð,.'-]{2,})/

这基本上是/([a-zA-Z,.'-]) ([a-zA-Z,.'-])/加上unicode支持。

2 个答案:

答案 0 :(得分:7)

我首先要确保你确实需要别人给你一个姓氏。这是真正的要求吗?如果没有,我会跳过它,因为它增加了不必要的复杂性和进入障碍。如果它确实是一项要求,那么在你的用户界面中分别设置名字和姓氏字段可能是有意义的。

你开始时没有这样做的事实暗示你可能并不像你想象的那样真正需要姓氏。

要回答您的原始问题,这个表达式可能会为您提供您正在寻找的内容而无需猜测:

/[\w]+([\s]+[\w]+){1}+/

它检查字符串是否包含至少2个由空格分隔的单词。就像Tim Pietzcker所指出的那样,验证单词本身很容易出错。

答案 1 :(得分:2)

在Ruby 1.9中,您可以访问Unicode属性(\p{L}是Unicode字母)。但是尝试以任何方式验证名称(正则表达式或非正则表达式)都容易失败,因为names are not what you think they are

你的理论“如果有空间,那里必须有一个姓氏”也是不正确的 - 想想中间名和中间名...