Я запускаю простую форму PHP, чтобы показать использование телефонных звонков в нашей системе звездочек. Вся информация о вызовах записывается в базу данных.
Я знаком с регулярными выражениями и PHP (в некоторой степени), но никогда не пытался объединить их раньше.
При анализе данных я хочу определить тип исходящего вызова, чтобы мы могли выставлять счета нашему клиенту по правильному тарифу. Я разделяю исходящие звонки на несколько классов, например, «местный», «национальный», «мобильный», «премиум», «международный» и «внутренний», однако мои попытки сопоставить первый класс (т.е. 'local') не удалось.
Локальные вызовы всегда будут иметь префикс 9
, за которым необязательно следует код локальной сети (01234
в этом примере). Затем следует локальный номер (567890
в этом примере). Обратите внимание, что местный номер не может начинаться с нуля.
Итак, числа, которые я пытаюсь сопоставить в приведенных выше примерах: 901234567890
или 9567890
.
Обычно я использую регулярное выражение, такое как ^9(01234)?[1-9][0-9]+
, и, проверяя его из оболочки bash, я получаю ожидаемые результаты
$ echo 091234567890 | egrep -e '^9(01234)?[1-9][0-9]+'
901234567890
$ echo 9567890 | egrep -e '^9(01234)?[1-9][0-9]+'
9567890
$ echo 908001234567 | egrep -e '^9(01234)?[1-9][0-9]+'
$ echo 901987654321 | egrep -e '^9(01234)?[1-9][0-9]+'
$ echo 907890123456 | egrep -e '^9(01234)?[1-9][0-9]+'
поэтому, пытаясь перевести это на работу в PHP, я придумал следующее:
$class='Unknown';
if (preg_match('/^9(01234)?[1-9][0-9]+/', $dest))
$class='Local Call';
// More regex matches to follow for other classes
Теперь, когда я кидаю следующий список чисел в приведенном выше
901234567890
9567890
908001234567
901987654321
907890123456
каждое из чисел соответствует регулярному выражению. Что я делаю не так?