2016-09-15 2 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は名前を信じています](https://www.kalzumeus.com/2010/06/17/falsehood-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)は動作するはずです。