正则表达式的名称

时间:2014-03-26 09:57:45

标签: ruby-on-rails regex

我需要确保人们为Rails中的表单正确输入他们的名字,中间名和姓氏。因此,正则表达式的第一个想法是:

\A[[:upper:]][[:alpha:]'-]+( [[:upper:]][[:alpha:]'-]*)*\z

这将确保名称中的每个单词都以大写字母开头,后跟字母或连字符或撇号。

我猜我的第一个问题与正则表达式没什么关系,尽管我希望有一个正则表达式,我可以为此复制。字母,连字符和撇号是我应该在名字中检查的唯一字符吗?

我的第二个问题是,确保每个名字至少包含1个大写字母是否很重要?这么多人输入所有小写名称,我真的想避免这种情况,但它有时合法吗?

这是我到目前为止确保名称中至少有一个大写字母:

\A([[:alpha:]'-]+ )*[[:alpha:]'-]*[[:upper:]][[:alpha:]'-]*( [[:alpha:]'-]+)*\z

是否有[:name:]括号表达式? :)

更新 :我在允许的字符中添加了.,,我最初并没有想到它们。 这么多的人必须要处理这种正则表达式!对于这类事情,没有人有任何预先制作的正则表达式吗?

2 个答案:

答案 0 :(得分:8)

一个良好的开端是允许字母,标记,点状和空格。允许使用像“María-Jose”这样的名字和像“van Rossum”这样的姓氏(注意空格)。 所以归结为:

[\p{Letter}\p{Mark}\p{Punctuation}\p{Separator}]+

如果您想稍微限制一下,可以查看\p{Lowercase_Letter}\p{Uppercase_Letter}\p{Titlecase_Letter}等类,但可能会有没有大小写的脚本。 \p{Space_Separator}\p{Dash_Punctuation}可以将其缩小到我所知道的名称。但我不知道的名字......我不知道......

但在开始构建正则表达式以“验证”名称之前。 请通过W3C阅读此excellent piece on names它甚至会动摇你的名字,中间名和姓名的概念。

例如:

在某些文化中,你会得到一个名字(Björk,Osama),并告诉你父亲(或母亲)是谁(Guðmundsdóttir,bin Mohammed)。所以“名字”可能是“Björk”但是:

  

Björk通常不会被称为Guðmundsdóttir女士。冰岛的电话簿按名称排序。

但在其他文化中,没有给出名字,而是给出一个姓氏。在“ZhāngMànyù”中,“Zhāng”是姓氏。如何解决她,取决于你对她的了解程度,但“女士”再一次会很奇怪。

示例列表以维基百科的30多个链接为基础,以更多示例结束。

本文最后提出了field design的建议以及允许使用哪些字符的一些指示:

  

不要忘记允许人们在名称中使用连字符,撇号等标点符号。不要求以大写字母全部输入名称 - 这在移动设备上可能很难。允许用户输入带空格的名称,例如。支持前缀和后缀,例如法语中的de,德语中的von和美国名称中的Jnr / Jr,还因为有些人认为空格分隔的字符序列是单个名称,例如。 Rose Marie。

答案 1 :(得分:0)

回答有关大写字母的问题:在世界上许多地方,名字不一定以大写字母开头。例如,在荷兰语中,你有姓氏,例如" van der Vliet"像" van"," de"," den"和" der"没有资本化。此外,您还有特殊情况,例如" De fauw"和" Van pellicom"行政错误从未得到纠正,正确的大写是相当不合逻辑的。请不要错误地拒绝这些名字。

我也知道南非的城镇名称,例如eThekwini,其中大写字母不一定是单词的第一个字母。这很可能出现在姓氏或姓名中。

相关问题