at.*_*at. 11 regex ruby-on-rails
我需要确保人们为Rails中的表单正确输入他们的第一个,中间名和姓氏.因此,正则表达式的第一个想法是:
\A[[:upper:]][[:alpha:]'-]+( [[:upper:]][[:alpha:]'-]*)*\z
Run Code Online (Sandbox Code Playgroud)
这将确保名称中的每个单词都以大写字母开头,后跟字母或连字符或撇号.
我猜的第一个问题与正则表达式没什么关系,尽管我希望有一个正则表达式我可以为此复制.字母,连字符和撇号是我应该在名字中检查的唯一字符吗?
我的第二个问题是,确保每个名称至少包含1个大写字母是否很重要?很多人输入所有小写名称,我真的想避免这种情况,但它有时合法吗?
这是我到目前为止确保名称中至少有一个大写字母:
\A([[:alpha:]'-]+ )*[[:alpha:]'-]*[[:upper:]][[:alpha:]'-]*( [[:alpha:]'-]+)*\z
Run Code Online (Sandbox Code Playgroud)
是不是有[:name:]括号表达式?:)
更新:我添加.和,所允许的字符,惊讶我没有原来他们的看法.这么多人必须要处理这种正规表达!对于这种事情,没有人有任何预先制作的正则表达式吗?
一个好的开始是允许字母,标记,点状和空格.允许使用像"María-Jose"这样的名字和像"van Rossum"这样的姓氏(注意空格).所以归结为:
[\p{Letter}\p{Mark}\p{Punctuation}\p{Separator}]+
Run Code Online (Sandbox Code Playgroud)
如果你想限制了一下,你可以看看像类\p{Lowercase_Letter},\p{Uppercase_Letter},\p{Titlecase_Letter},但也有可能是没有外壳脚本.\p{Space_Separator}并且\p{Dash_Punctuation}可以缩小到我所知道的名字.但我没有的名字......我不知道......
但在开始构建正则表达式以"验证"名称之前.请阅读W3C 关于名字的这篇优秀文章.它甚至会动摇你的名字,中间名和姓名的概念.
例如:
在某些文化中,你会得到一个名字(Björk,Osama),并指出你父亲(或母亲)是谁(Guðmundsdóttir,bin Mohammed).所以"名字"可能是"Björk"但是:
Björk通常不会被称为Guðmundsdóttir女士.冰岛的电话簿按名称排序.
但在其他文化中,没有给出名字,而是一个姓氏.在"ZhāngMànyù"中,"Zhāng"是姓氏.如何解决她,取决于你对她的了解程度,但"女士"再一次会很奇怪.
示例列表以维基百科的30多个链接为例进行说明,以获取更多示例.
本文最后提出了关于字段设计的建议以及允许使用哪些字符的一些指示:
不要忘记允许人们在名称中使用连字符,撇号等标点符号.不要求以大写字母全部输入名称 - 这在移动设备上可能很难.允许用户输入带空格的名称,例如.支持前缀和后缀,例如法语中的de,德语中的von和美国名称中的Jnr/Jr,还因为有些人认为以空格分隔的字符序列是单个名称,例如.玫瑰玛丽.