0

我正在尝试编写一个简单的正则表达式来验证姓名和姓氏。我在使用特殊字符时遇到了一些麻烦。

我希望名称至少由一个 a-zA-Z 组成,然后是空格、点和字符 ' 的任意组合

试图验证像 Penny O'Malley 或 Rob M. Johnson 这样的好名字

到目前为止,我正在运行这个:

/^[A-z][A-z\s.']+$/ 

但它与上面的名称不匹配;它适用于没有 . 和 ' ,并且不在乎是否有开头空格....

已解决:根据@basher 的要求,这是我在 laravel 验证器中运行的代码。有趣的是,我很肯定我首先尝试了反斜杠版本(你在下面看到的那个,而不是我放在原始帖子中的那个)并且似乎没有工作......

'name' => 'required|between:3,15|regex:/^[A-z][A-z\s\.\']+$/',
'surname' => 'required|between:3,15|regex:/^[A-z][A-z\s\.\']+$/',

感谢所有做出贡献的人。不过,我不确定如何在你们中间将功劳归于正确答案。@user2141046,是的,\s 似乎可以工作,至少在 laravel 框架中是这样。

4

1 回答 1

0

我不确定您是否可以将 \s 插入括号中。

尝试[a-zA-Z.' ][a-zA-Z\.\'\ ]作为您的第二个正则表达式(可能会根据语言而变化)

 echo "Rob M. Mc'Fly" > try
 grep --colour "[a-zA-Z\'\.\ ]" !$
 >> Rob M. Mc'Fly  (colors the entire name).

在 perl 正则表达式上也确认了^[A-z][A-z\'\.\ ]+

顺便说一句,永远不要记住 ASCII 代码,所以我更喜欢写A-Za-z;) 另一件事可能困扰你的是隐藏字符(前导空格)或者回车(如果存在操作系统差异),可能会很好地摆脱尾随$并再次尝试检查它或摆脱前导^并检查空格问题。

于 2013-07-15T14:19:02.517 回答