刚刚开始探索正则表达式的"奇迹".作为一个从反复试验中学习的人,我真的很挣扎,因为我的试验引发了不成比例的错误...我的实验是在PHP中使用ereg().
无论如何.我分别使用名字和姓氏,但现在使用相同的正则表达式.到目前为止,我有:
^[A-Z][a-zA-Z]+$
任何长度字符串,以大写字母开头,并且只有字母(大写或不大写).但是我分崩离析的是处理几乎可以在任何地方发生的特殊情况.
连字符(Worthington-Smythe)
名字与Apostophies(D'Angelo)
带空格的名字(Van der Humpton) - 中间的大写字母可能需要也可能不需要在这个阶段超出我的兴趣.
联名(Ben&Jerry)
也许还有一些其他的方式,我不会想到一个名字,但我怀疑如果我能解决这个问题,我可以补充一下.我很确定会出现一个名称中出现多种情况的情况.
所以,我认为最重要的是让我的正则表达式也接受空格,连字符,符号和撇号 - 但不是在名称的开头或结尾处技术上是正确的.
这个正则表达式对我来说是完美的.
^([ \u00c0-\u01ffa-zA-Z'\-])+$
它在使用preg_match()的php环境中工作正常,但无处不在.
它匹配Jérémie O'Co-nor
所以我认为它匹配所有UTF-8名称.
连字符(Worthington-Smythe)
在第二个字符类中添加一个 - .最简单的方法是在开始时添加它,以便它不可能被解释为范围修饰符(如a-z
).
^[A-Z][-a-zA-Z]+$
名字与Apostophies(D'Angelo)
这样做的天真方式如上,给出:
^[A-Z][-'a-zA-Z]+$
不要忘记你可能需要在字符串内逃脱它!一个'更好'的方式,给出你的例子可能是:
^[A-Z]'?[-a-zA-Z]+$
这将允许在第二个位置可能的单个撇号.
带空格的名字(Van der Humpton) - 中间的大写字母可能需要也可能不需要在这个阶段超出我的兴趣.
在这里,我很想再次以天真的方式行事:
^[A-Z]'?[- a-zA-Z]+$
一种可能更好的方法可能是:
^[A-Z]'?[- a-zA-Z]( [a-zA-Z])*$
在最后寻找额外的单词.如果你试图在一个额外的文本体中匹配名称,这可能不是一个好主意,但是再一次,原来也不会做得那么好.
联名(Ben&Jerry)
此时你不再看单个名字了吗?
无论如何,正如你所看到的,正则表达式有一种快速成长的习惯......
最佳注释表达式:
我将使用术语特殊字符来指代以下三个字符:
短跑-
连字符'
点.
空格和特殊字符不能连续出现两次(例如:-或'.或..)
修剪(前后无空格)
别客气 ;)
必填单个名称,没有空格,没有特殊字符:
^([A-Za-z])+$
Sierra有效,Jack Alexander无效(有空格),O'Neil无效(有特殊字符)
强制单个名称,WITHOUT空格,WITH特殊字符:
^[A-Za-z]+(((\'|\-|\.)?([A-Za-z])+))?$
塞拉有效,奥尼尔有效,杰克亚历山大无效(有空位)
必填单个名称,可选附加名称,WITH空格,WITH特殊字符:
^[A-Za-z]+((\s)?((\'|\-|\.)?([A-Za-z])+))*$
Jack Alexander有效,Sierra O'Neil有效
必填单个名称,可选附加名称,WITH空格,WITHOUT特殊字符:
^[A-Za-z]+((\s)?([A-Za-z])+)*$
Jack Alexander有效,Sierra O'Neil无效(有特殊性格)
许多现代智能设备在每个单词的末尾添加空格,因此在我的应用程序中,我允许在字符串之前和之后无限数量的空格,然后我在后面的代码中修剪它.所以我使用以下内容:
强制单个名称+可选附加名称+空格+特殊字符:
^(\s)*[A-Za-z]+((\s)?((\'|\-|\.)?([A-Za-z])+))*(\s)*$
如果您想添加自己的特殊字符,请说明下划线_ 这是您需要更新的组:
(\'|\-|\.)
至
(\'|\-|\.|\_)
PS:如果您有问题在这里发表评论,我会收到一封电子邮件并回复;)
虽然我同意答案说你基本上不能用正则表达式做这个,但我会指出一些反对意见(国际化字符)可以通过使用UTF字符串和\p{L}
字符类(匹配unicode"字母")来解决.
我真的没有太多要添加到正则表达式来处理名称,因为这里已经有一些很好的建议了,但是如果你想要一些资源来学习更多关于正则表达式的东西,你应该看看:
正则表达式图书馆的 备忘单
另一个备忘单
DevNetwork论坛上的正则表达式教程:第1 部分和第2部分
PHP构建器的教程
如果你需要为JavaScript做一个正则表达式(它有点不同的味道),试试JavaScript Kit,或者这个资源,或者Mozilla的参考