-1

電話が配列にあるかどうかを確認したいのですが、ワイルドカードを使用しています。

foreach 内には、次のコードがあります。

$phone = '98765432'; // Data of stored phone
$match = '987*5432'; // Input with search term

echo preg_match('/^' . str_replace('*', '.*', $match) . '$/i' , $phone);

次のいずれかを検索すると、preg_match機能するはずです。

9*
987*5432
987*
*876*

ただし、たとえば、間違った番号で検索すると機能しpreg_matchないはずです。

8*65432
*1*
98*7777

試してみましたが、正しい解決策が見つかりません。ありがとう!

編集1

2*2*に渡す必要がありますが2020、に渡す必要はありません2002

4

2 に答える 2

2

すべてを一致させようとする代わりに、電話番号を扱っていることがわかっているので、数字だけに注目します。

preg_match('/^' . str_replace('*', '\d*', $input) . '$/i' , $phone);

あなたの入力に合うと思われる簡単なテストケースを書きました。

$phone = '98765432'; // Data of stored phone

function test( $input, $phone) {
    return preg_match('/^' . str_replace('*', '\d*', $input) . '$/i' , $phone);
}

echo 'Should pass:' . "\n";
foreach( array( '9*', '987*5432', '987*', '*876*') as $input) {
    echo test( $input, $phone) . "\n";
}

echo 'Should fail:' . "\n";
foreach( array( '8*65432', '*1*', '98*7777') as $input) {
    echo test( $input, $phone) . "\n";
}

出力:

Should pass:
1
1
1
1
Should fail:
0
0
0
于 2013-04-08T15:48:07.203 に答える
2

\d次のように、で試すことができます。

preg_match('/^' . str_replace('*', '(\d+)', $match) . '$/i' , $phone);
于 2013-04-08T15:48:29.623 に答える