当前位置:  开发笔记 > 编程语言 > 正文

正则表达式的名称

如何解决《正则表达式的名称》经验,为你挑选了5个好方法。

刚刚开始探索正则表达式的"奇迹".作为一个从反复试验中学习的人,我真的很挣扎,因为我的试验引发了不成比例的错误...我的实验是在PHP中使用ereg().

无论如何.我分别使用名字和姓氏,但现在使用相同的正则表达式.到目前为止,我有:

^[A-Z][a-zA-Z]+$  

任何长度字符串,以大写字母开头,并且只有字母(大写或不大写).但是我分崩离析的是处理几乎可以在任何地方发生的特殊情况.

连字符(Worthington-Smythe)

名字与Apostophies(D'Angelo)

带空格的名字(Van der Humpton) - 中间的大写字母可能需要也可能不需要在这个阶段超出我的兴趣.

联名(Ben&Jerry)

也许还有一些其他的方式,我不会想到一个名字,但我怀疑如果我能解决这个问题,我可以补充一下.我很确定会出现一个名称中出现多种情况的情况.

所以,我认为最重要的是让我的正则表达式也接受空格,连字符,符号和撇号 - 但不是在名称的开头或结尾处技术上是正确的.



1> Daan..:

这个正则表达式对我来说是完美的.

^([ \u00c0-\u01ffa-zA-Z'\-])+$

它在使用preg_match()的php环境中工作正常,但无处不在.

它匹配Jérémie O'Co-nor所以我认为它匹配所有UTF-8名称.



2> Matthew Scha..:

连字符(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)

此时你不再看单个名字了吗?

无论如何,正如你所看到的,正则表达式有一种快速成长的习惯......



3> 小智..:

最佳注释表达式:

我将使用术语特殊字符来指代以下三个字符:

    短跑-

    连字符'

    .

空格和特殊字符不能连续出现两次(例如:-'...)

修剪(前后无空格)

别客气 ;)


必填单个名称,没有空格,没有特殊字符:

^([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:如果您有问题在这里发表评论,我会收到一封电子邮件并回复;)



4> eyelidlessne..:

虽然我同意答案说你基本上不能用正则表达式做这个,但我会指出一些反对意见(国际化字符)可以通过使用UTF字符串和\p{L}字符类(匹配unicode"字母")来解决.



5> VirtuosiMedi..:

我真的没有太多要添加到正则表达式来处理名称,因为这里已经有一些很好的建议了,但是如果你想要一些资源来学习更多关于正则表达式的东西,你应该看看:

正则表达式图书馆的 备忘单

另一个备忘单

DevNetwork论坛上的正则表达式教程:第1 部分和第2部分

PHP构建器的教程

如果你需要为JavaScript做一个正则表达式(它有点不同的味道),试试JavaScript Kit,或者这个资源,或者Mozilla的参考

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有