ifステートメントでワイルドカードを使用することは可能ですか?
私のコード:
*
=ワイルドカード
if ($admin =='*@some.text.here') {
}
$admin
これらのいずれかになります:
- xvilo@some.text.here
- bot!bot@some.text.here
- lakjsdflkjasdflkj@some.text.here
正規表現を使用したくない場合はfnmatch()
、この[限定された]目的に役立つ可能性があります。期待どおりにシェルのようなワイルドカードを使用して文字列と一致します。
if (fnmatch('*@some.text.here', $admin)) {
}
文字列が期待する値で終わっていることを確認できます。
$suffix = '@some.text.here';
if (substr($admin, -strlen($suffix)) == $suffix) {
// Do something
}
これがワイルドカード関数です。
あなたが使用しようとしているので、私は(単一文字*
の一致)をコメントアウトしました。.
これにより、全体でワイルドカードを使用できるようになります
*xxx
。-「xxx」で終了-「xxx」で
xxx*
開始
xx*zz
-「xx」で始まり「zz」で終了
*xx*
-中央に「xx」があります
function wildcard_match($pattern, $subject)
{
$pattern='/^'.preg_quote($pattern).'$/';
$pattern=str_replace('\*', '.*', $pattern);
//$pattern=str_replace('\.', '.', $pattern);
if(!preg_match($pattern, $subject, $regs)) return false;
return true;
}
if (wildcard_match('*@some.text.here', $admin)) {
}
しかし、私は自分で正規表現を使うことを学ぶことをお勧めしpreg_match()
ます。
if (strstr ($admin,"@some.text.here")) {
}
strstr()を使用すると、必要な処理を実行したり、stristr()で指摘されたとおりに実行したりできます。
または、このようなstrposを使用できます
$pos = strrpos($mystring, "@some.text.here");
if ($pos === false) { // note: three equal signs
// not found...
} else {
//found
}
または最後から(私はそれをテストしていないと思います)
$checkstring = "@some.text.here";
$pos = strrpos($mystring, $checkstring, -(strlen($checkstring)));
if ($pos === false) { // note: three equal signs
// not found...
} else {
//found
}
文字列が別の文字列で見つかったかどうかを確認する最速の方法は、strpos()です。
if (strpos($admin, '@some.test.here') !== false) { }
@ some.text.hereが最後に発生することを確認する必要がある場合は、代わりにsubstr_compare()を使用することをお勧めします。
if (substr_compare($str, $test, strlen($str)-strlen($test), strlen($test)) === 0) {}