1

私はこの関数を書きました:

function contain_special($string){
# -- Check For Any Special Chars --
if(preg_match('/[^a-z0-9]/',$string)){
# - Special Chars Were Found -
return true;    
}//end of special chars found
else{
# - String Does Not Contain Special Chars -
return false;   
}//end of else - does not contain special chars 
}//end of function

文字列に特殊文字が含まれているかどうかを確認します。

この関数は、英数字を無視して特殊文字を探すことになっています。見つかった場合は、を返しtrue、そうでない場合はを返しfalseます。

これで、ほとんどの特殊文字でテストするときにすべてがうまく機能します。

$text="sdfs-df";

var_dump(contain_special($text));//returns true because "-" was found

しかし、$文字列の特定の位置にないものがある場合、関数はそれを取得できません。

$text="sdfsdf$";//this works
$text="sdf$sdf";//this does not work
$text="$sdfsdf";//this works

私がここで間違っていることについて何か考えはありますか?

4

3 に答える 3

2

を見てくださいecho $text。自分が思っている文字列を使用していない可能性があります。$sdfsdfたとえば、変数を使用しないように、リテラルのドル記号は二重引用符で囲まれた文字列でエスケープする必要があることがよくあります。

ここでは一重引用符を使用することをお勧めします。

http://php.net/manual/en/language.types.string.php

于 2012-05-23T16:29:42.903 に答える
0

^文字列の開始用です。OK-間隔も無効にします(ただし、無効にする必要はありません-trueとfalseを切り替えるだけです)

$文字列の終わりです。

*ゼロ鉱石以上の回数を意味します。

したがって、必要な正規表現は次のとおりです。 \^[a-z0-9]*$\

それは動作しますか?

于 2012-05-23T16:34:04.393 に答える
0

二重引用符で囲まれたドルは、変数名を有効に開始する文字が後に続かない限り、変数置換を開始します。これは、なぜ$text="sdfsdf$"機能するのか、機能$text="sdf$sdf"しないのかを説明しています。最後の例は、という名前の変数がある場合に機能する可能性があります$sdfsdf

于 2012-05-23T16:43:31.430 に答える