2013-01-15 81 views
0

我有一個正則表達式如下:笨 - 正則表達式表達,包括一個時期 - 的preg_match

return (! preg_match("/^([-a-z_ -])+$/i", $str)) ? FALSE : TRUE; 

我需要添加到它允許一個週期,從而使輸入可能是這樣的:

「聖奧斯特爾」或「聖托馬斯」

我已經想盡各種辦法來的月經添加上述規則,但頁面要麼崩潰了,只是顯示一個空白頁,或者我的驗證錯誤觸發。

我嘗試過這樣的事情,但無濟於事。

([-a-z_ -.]) 
([-a-z_ -\.]) 
([-a-z_ -])\. 
(\.[-a-z_ -]) etc etc... 

我已經嘗試了一切,似乎沒有蜜蜂任何運氣 - 任何想法

非常感謝

詹姆斯

+2

初始正則表達式是多餘的,因爲它指定了兩次'-'。此外,''a-z_ .-]'應該可以工作,你只需要把'a-z'和''放在'''之後或'''之後'。最後,'返回!條件? false:true;'應簡化爲'return condition;',因爲'condition'已經返回'true'或'false'。 – sp00m

+0

謝謝,我現在試過這個:/ ^([a-z_ .-])+ $ /我,我仍然只是得到一個沒有內容的白頁 - 如果我刪除。該頁面再次返回 - 任何想法?我試圖逃避這段時間,但它仍然不起作用 –

+1

對不起,我的壞,有一個錯字 - 感謝sp00m - 你已經明白了! –

回答

1

三點:

  1. 的初始正則表達式是多餘的,因爲它指定了兩次-

  2. [a-z_ .-]應該工作,你就必須讓a-z在一起,只是後-[或之前](否則,-將被視爲元字符)。

  3. return !condition ? false : true;應簡化到return condition;,由於condition已經返回truefalse(對於if(!condition) {var = false;} else {var = true;}相同的邏輯應被簡化爲var = condition;)。