刚刚开始探索正则表达式的"奇迹".作为一个从反复试验中学习的人,我真的很挣扎,因为我的试验引发了不成比例的错误...我的实验是在PHP中使用ereg().
无论如何.我分别使用名字和姓氏,但现在使用相同的正则表达式.到目前为止,我有:
^[A-Z][a-zA-Z]+$
Run Code Online (Sandbox Code Playgroud)
任何长度字符串,以大写字母开头,并且只有字母(大写或不大写).但是我分崩离析的是处理几乎可以在任何地方发生的特殊情况.
也许还有一些其他的方式,我不会想到一个名字,但我怀疑如果我能解决这个问题,我可以补充一下.我很确定会出现一个名称中出现多种情况的情况.
所以,我认为最重要的是让我的正则表达式也接受空格,连字符,符号和撇号 - 但不是在名称的开头或结尾处技术上是正确的.
Daa*_*aan 46
这个正则表达式对我来说是完美的.
^([ \u00c0-\u01ffa-zA-Z'\-])+$
Run Code Online (Sandbox Code Playgroud)
它在使用preg_match()的php环境中工作正常,但无处不在.
它匹配Jérémie O'Co-nor所以我认为它匹配所有UTF-8名称.
Mat*_*ley 41
在第二个字符类中添加一个 - .最简单的方法是在开始时添加它,以便它不可能被解释为范围修饰符(如a-z).
^[A-Z][-a-zA-Z]+$
这样做的天真方式如上,给出:
^[A-Z][-'a-zA-Z]+$
不要忘记你可能需要在字符串内逃脱它!一个'更好'的方式,给出你的例子可能是:
^[A-Z]'?[-a-zA-Z]+$
这将允许在第二个位置可能的单个撇号.
在这里,我很想再次以天真的方式行事:
^[A-Z]'?[- a-zA-Z]+$
一种可能更好的方法可能是:
^[A-Z]'?[- a-zA-Z]( [a-zA-Z])*$
在最后寻找额外的单词.如果你试图在一个额外的文本体中匹配名称,这可能不是一个好主意,但是再一次,原来也不会做得那么好.
此时你不再看单个名字了吗?
无论如何,正如你所看到的,正则表达式有一种快速成长的习惯......
小智 10
最佳注释表达式:
必填单个名称,没有空格,没有特殊字符:
^([A-Za-z])+$
Run Code Online (Sandbox Code Playgroud)
强制单个名称,WITHOUT空格,WITH特殊字符:
^[A-Za-z]+(((\'|\-|\.)?([A-Za-z])+))?$
Run Code Online (Sandbox Code Playgroud)
必填单个名称,可选附加名称,WITH空格,WITH特殊字符:
^[A-Za-z]+((\s)?((\'|\-|\.)?([A-Za-z])+))*$
Run Code Online (Sandbox Code Playgroud)
必填单个名称,可选附加名称,WITH空格,WITHOUT特殊字符:
^[A-Za-z]+((\s)?([A-Za-z])+)*$
Run Code Online (Sandbox Code Playgroud)
许多现代智能设备在每个单词的末尾添加空格,因此在我的应用程序中,我允许在字符串之前和之后无限数量的空格,然后我在后面的代码中修剪它.所以我使用以下内容:
强制单个名称+可选附加名称+空格+特殊字符:
^(\s)*[A-Za-z]+((\s)?((\'|\-|\.)?([A-Za-z])+))*(\s)*$
Run Code Online (Sandbox Code Playgroud)
如果您想添加自己的特殊字符,请说明下划线_ 这是您需要更新的组:
(\'|\-|\.)
Run Code Online (Sandbox Code Playgroud)
至
(\'|\-|\.|\_)
Run Code Online (Sandbox Code Playgroud)
PS:如果您有问题在这里发表评论,我会收到一封电子邮件并回复;)
安全提示:请确保在此步骤之前验证字符串的大小,以避免 DoS 攻击,该攻击会通过发送很长的字符集来瘫痪您的系统。
看一下这个:
^(([A-Za-z]+[,.]?[ ]?|[a-z]+['-]?)+)$
Run Code Online (Sandbox Code Playgroud)
您可以在这里测试它:https://regex101.com/r/mS9gD7/46
| 归档时间: |
|
| 查看次数: |
87988 次 |
| 最近记录: |