2011-08-08 12 views
0

は、この正しいですか?私はそれが単一の文字を見つけるためのするpreg_match条件の問題

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

それは私のためにうまくいきます。たぶん問題は別の場所にあるのでしょうか? –

答えて

2

を動作させることができません、正規表現は、大規模なやり過ぎです。ただ、

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

trueの場合はcharsが見つかりませんでしたか? – Zuker

+0

文字が見つからない場合、strposはbooleanを返します。 charが文字列の先頭にある場合は0を返すこともできます。これはfalseとして扱われるため、strict inequality check(!==)を使用する必要があります。 –

+0

だから私は===を使用する必要があります。なぜなら、真の文では文字が見つからなかったからです。 私は\t \t \t \t \t \t \t \t 持っていれば((strpos( '"'、$ nick_2)=== FALSE)&&(strpos( 'N'、strtolower($ nick_2))=== FALSE )){ ... chars not found } – Zuker

1

を使用おそらく、あなたの文字列が、その場合には、あなたがpreg_matchu修飾子を使用する必要がありますし、その関数のALSへのあなたの表現を提出する必要があり、UTF-8でありますo UTF-8でその場合は

、あなたはまた、これらの事のいくつかをしたいでしょう:

  • mb_選択肢でstrtolowerstrlenを交換してください。
  • Normalize入力。
  • これらの文字があるグラフェンがコードポイントを持っていないかどうかを確認してください。