2013-04-08 3 views
-1

Я хочу проверить, находится ли телефон в андре, но с подстановочным знаком.Поиск телефона с подстановочным знаком

Внутри Еогеасп Я имею THW следовать код:

$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 

Я пробовал, но не может найти правильное решение. Благодаря!

EDIT 1

2*2* должен пройти 2020, но не 2002

+1

Почему '* 7 *' не совпадают? Похоже, должно. – nickb

+0

@nickb К сожалению, это опечатка –

ответ

2

Вы можете попробовать с \d, как это:

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

Вы можете увидеть обновленный вопрос, пожалуйста? –

+1

@GabrielSantos Я обновил ответ, просто используйте '\ d +' вместо '\ d *' – Uby

2

Вместо того, чтобы пытаться соответствовать все, я бы сосредоточиться только на цифры, так как вы знаете, вы имеете дело с номером телефона:

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

Я написал simple test case, что, кажется, работает для ввода.

$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 
+0

Можете ли вы увидеть обновленный вопрос, пожалуйста? –

Смежные вопросы