5

ifステートメントでワイルドカードを使用することは可能ですか?

私のコード:

*=ワイルドカード

if ($admin =='*@some.text.here') {

}

$adminこれらのいずれかになります:

  • xvilo@some.text.here
  • bot!bot@some.text.here
  • lakjsdflkjasdflkj@some.text.here
4

5 に答える 5

14

正規表現を使用したくない場合はfnmatch()、この[限定された]目的に役立つ可能性があります。期待どおりにシェルのようなワイルドカードを使用して文字列と一致します。

if (fnmatch('*@some.text.here', $admin)) {

}
于 2013-03-14T16:32:40.250 に答える
3

文字列が期待する値で終わっていることを確認できます。

$suffix = '@some.text.here';

if (substr($admin, -strlen($suffix)) == $suffix) {
    // Do something
}
于 2013-03-14T15:46:08.063 に答える
3

これがワイルドカード関数です。
あなたが使用しようとしているので、私は(単一文字*の一致)をコメントアウトしました。.

これにより、全体でワイルドカードを使用できるようになります
*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()ます。

于 2013-03-14T16:12:31.153 に答える
1
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
}
于 2013-03-14T15:45:08.143 に答える
0

文字列が別の文字列で見つかったかどうかを確認する最速の方法は、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) {}
于 2013-03-14T15:47:02.517 に答える