我一直对正则表达式感到困扰,如果这种方法似乎很糟糕,请原谅我。
当用户输入名字和姓氏时,我开始只使用基本的检查方法,检查大小写、空格、撇号和连字符。
if (!preg_match("/^[a-zA-Z\s'-]+$/", $name)) { // Error }
现在我意识到这不是最好的方法,因为人们可能会有像Dr. Martin Luther King, Jr.(带逗号和句号)这样的东西。因此,我认为将其更改为以下内容会使其稍微更有效。
if (!preg_match("/^[a-zA-Z\s,.'-]+$/", $name)) { // Error }
我在Facebook上看到了一个我认识的女孩的名字,她把自己的名字写作Siân,这让我想到含有umlauts以及日语/中文/韩语/俄语字符的名称。于是我开始搜索,并发现可以像这样通过将每个字符写入其中来实现。
if (!preg_match("/^[a-zA-Z\sàáâäãåèéêëìíîïòóôöõøùúûüÿýñçčšžÀÁÂÄÃÅÈÉÊËÌÍÎÏÒÓÔÖÕØÙÚÛÜŸÝÑßÇŒÆČŠŽ∂ð ,.'-]+$/u", $first_name)) { // Error }
可以想象,这非常冗长,我几乎可以确定有一个更简单的正则表达式可以实现这个功能。就像我说的,我已经搜索过了,但这是我能做到的最好的。
所以,有什么好的方法来检查大写和小写字母、逗号、句号、撇号、连字符、umlauts、拉丁文、日语/俄语等吗?