【发布时间】:2011-11-04 18:10:47
【问题描述】:
我一直在与 RegEx 斗争,所以如果这看起来是解决我的问题的糟糕方法,请原谅我。
当用户输入名字和姓氏时,我一开始只使用基本的,检查大小写、空格、撇号和连字符
if (!preg_match("/^[a-zA-Z\s'-]+$/", $name)) { // Error }
现在我意识到这不是最好的,因为人们可以拥有以下内容:Martin Luther King, Jr. 博士(带逗号和句号)。所以我认为通过将其更改为 this 会使其更有效。
if (!preg_match("/^[a-zA-Z\s,.'-]+$/", $name)) { // Error }
然后我在我的 Facebook 上看到一个我认识的女孩名字,她把她的名字写成 Siân,这让我想到了包含变音符号以及日文/中文/韩文/俄文字符的名字。所以我开始搜索并找到方法,像这样在其中写下每个字符。
if (!preg_match("/^[a-zA-Z\sàáâäãåèéêëìíîïòóôöõøùúûüÿýñçčšžÀÁÂÄÃÅÈÉÊËÌÍÎÏÒÓÔÖÕØÙÚÛÜŸÝÑßÇŒÆČŠŽ∂ð ,.'-]+$/u", $first_name)) { // Error }
正如您可以想象的那样,它非常冗长,我很确定有一个更简单的 RegEx 可以实现这一点。就像我说的,我已经四处寻找,但这是我能做的最好的。
那么,检查大小写字符、逗号、句号、撇号、连字符、变音符号、拉丁语、日语/俄语等的好方法是什么
【问题讨论】:
-
除非您先进行标准化,否则这将无法正常工作,而且通常甚至在那时也无法正常化。