2016-09-15 96 views
-1

我使用这个正则表达式来确保名称只能包含字母,撇号或连字符。人名正则表达式PHP

Validator::extend('people_names', function($attribute, $value, $parameters, $validator) { 
     return preg_match("^[a-zA-Z-'\s]+$^", $value); 

当我使用这个tool检查,如果正则表达式是正确的,它显示了其正确的,但在我的形式当我测试的输入开始用数字或任何其他字符,如123name#$#$name它传递,而它应该不。用字母输入然后像name123这样的数字被拒绝。

+0

[Falsehoods Programmers Believe About Names](https://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/) –

回答

2

PHP preg_函数需要以/^开头并以$/结尾。

试试这个:

preg_match("/^[a-zA-Z-'\s]+$/", $value); 
+0

在PHP中,您不必*启动用'/ ^'结尾并以'$ /'*结尾,只是'preg_'函数需要一个正则表达式分隔符。 –

+1

'^'和'$'是*模式*的一部分*正则表达式锚,正则表达式分隔符是'/'前导和尾随符号。 –

1

在你的正则表达式^[a-zA-Z-'\s]+$^,你只检查是否字符串使用$在最后一个字母结束,但^之初这里asthe正则表达式分隔符使用,因为它也在最后。

我推荐使用另一个字符串分隔符,如#/

preg_match("#^[a-zA-Z-'\s]+$#", $value)应该工作。