2010-08-20 119 views
0

最近我已經切換到PHP 5.3+和遷移後,我得知eregi()函數已折舊,其功能我主要用於我的正則表達式的需求。幫助正則表達式使用preg_match

但現在我不得不切換到preg_match()函數,我無法驗證某個條件。

的Hello World

我想要的preg_match以驗證上述的 「Hello World」 的字符串,字符串包含在它的空白。

但我希望它即使沒有空白「helloWorld」或只是「你好」來驗證。

我想要做的是在我的腳本中我有一個類別標題的文本字段,我希望它接受它中的空格,並且沒有其他特殊字符(如._- + *,) 。

我已經使它工作,但我不知道如果這是我正在使用的正確方法。

preg_match('/^[a-zA-Z0-9\s]*$/', $cat_name);' 

任何幫助,將不勝感激。

回答

4

看起來不錯,但會接受空字符串,所以你可以更改*到+ 請記住,這個正則表達式不會接受語言指定的UTF-8字符。

見手冊中的這一評論: http://www.php.net/manual/en/function.preg-match.php#95828

還要注意的是,一些特定charaters都在標題中使用非常頻繁,如「也許這將更好地允許它

+0

+1,因爲我也在更新我的回答,但我認爲你快了2秒。 :) – 2010-08-20 13:45:33

+0

感謝Killer_PL和馬克Byers :) 我實際上檢查這個正則表達式檢查非空條件。 – Zubair1 2010-08-20 13:50:47

+0

大聲笑我不知道如何在這裏發表評論的代碼:)它顯示搞砸了。 – Zubair1 2010-08-20 13:52:27

1

是的,那是正確的方法。您還可以使用不敏感的情況下修改,而不是a-zA-Z

,你可能要考慮
preg_match('/^[a-z0-9\s]*$/i', $cat_name);' 

的一件事是你的正則表達式目前接受空字符串。如果要確保至少有一個字符,則使用+而不是*

0

請注意\還允許其他空格字符,如製表符或換行符。

+0

還有什麼我可以使用比\ s? – Zubair1 2010-08-20 13:48:04

+1

只是使用空格代替:「」(不包括括號) – 2010-08-20 13:54:43

+1

使用簡單的空格('')代替...僅適用於空格,而不適用於其他空格 – Frxstrem 2010-08-20 13:55:58

1

應該工作,但你。可以用普通的空間「」替換\ S,所以它只匹配空格代替其他空白字符(如標籤)。另外,*用+,所以它不會採取空字符串替換。

preg_match('/^[a-z0-9 ]+$/i', $cat_name);' 
+0

謝謝,完成:) 如果我在這個preg_match之前檢查空字符串,它仍然是一個威脅嗎?我仍然這樣做只是incase,但想知道:) – Zubair1 2010-08-20 13:57:52

+1

你應該不必,但你可以使用不同的檢查來返回不同的錯誤信息。可能是用戶友好的告訴用戶他做錯了什麼錯誤:) – Powertieke 2010-08-20 14:16:58