2016-09-15 62 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)應該工作。