2011-08-08 58 views
0

我wan't檢查一個字符串($ nick_2)獲得「或N的preg_match條件問題

這是正確的嗎?我不能讓它工作

if ((strlen($nick_2) >= 3) && (strlen($nick_2) <= 25) && (!preg_match("/\"/", $nick_2)) && (!preg_match("/ñ/", strtolower($nick_2)))) { 
+0

它適合我。也許問題在其他地方? – 2011-08-08 16:34:15

回答

2

爲了找到單個字符,正則表達式是巨大的矯枉過正。只需使用

if ((strpos('"', $nick_2) !== FALSE) || (strpos('ñ', $nick_2) !== FALSE)) { 
    ... chars were found 
} 
+0

如果真的應該是字符沒有找到? – Zuker

+0

如果未找到該字符,則strpos返回布爾值。如果char在字符串的開始處,它也可以返回0,這會被視爲false,這就是爲什麼您必須使用嚴格的不等式檢查(!==)。 –

+0

所以我應該使用===因爲我的真實聲明需要找到字符,對嗎? 我有 \t \t \t \t \t \t \t \t如果((strpos( '「',$ nick_2)=== FALSE)&&(strpos( 'N',用strtolower($ nick_2))=== FALSE )){ ...未找到字符 } – Zuker

1

也許你的字符串是UTF-8,在這種情況下,你必須使用u修飾符preg_match並應當提交你的表達到功能ALS o UTF-8。

如果是這樣的話,你也希望做一些事情:

  • 更換strtolowerstrlenmb_替代品。
  • Normalize的輸入。
  • 檢查這些字符所在的字形是否沒有更多的代碼點。