2013-07-15 84 views
0

我想寫一個簡單的正則表達式來驗證名字和姓氏。我在特殊字符方面遇到了一些麻煩。正則表達式匹配姓名和姓氏:如何接受點和連字符?

我想由至少一個A-ZA-Z,那麼任何空間,點的組合,和字符「

試圖驗證的好名字,如竹奧馬利的名字,或羅布約翰遜M.

到目前爲止我運行此:

/^[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,是的,\至少在laravel框架中似乎起作用。

+1

正則表達式看起來不錯。您可能沒有正確實施它。介意發佈該代碼? – basher

+0

@basher,我在上面添加了它。實際上它需要逃避。和',有趣的是我相信這是我做的第一次嘗試,似乎沒有工作。謝謝! – RedSash

回答

0

我不確定你可以插入\括號。

嘗試[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 ;) 另一件可能會困擾你的事情是隱藏的字符(前導空格)或回車符(如果有操作系統差異),可能是很好的擺脫尾隨$並再次嘗試chec k它或擺脫領先^並檢查空白問題。

+0

我不知道Laravel,但通常你可以在'[]'中插入字符類('\ s')。 – Dukeling

+0

我也不太瞭解幼蟲,但這可能是他的問題。每種語言和它的問題... – user2141046

+0

@Dukeling,user2141046謝謝,好像我可以插入\ s。我保留了/^$ /,因爲它似乎不會引起大驚小怪,而且我可以在開始或結尾生存。 '。謝謝大家。 – RedSash