if (!preg_match('/^freetrip\s+([1-5]{5})$/i', $sms, $matches)) exit("error");
print_r($matches);
У меня был некоторый опыт работы с SMS-платформами и AFAIK достаточно одной ошибки. Мы попытались обнаружить похожие символы, такие как маленькая буква L и большая буква I и т. Д., А также ноль и буква O. Например, в вашем случае вы могли бы написать что-то вроде этого:
preg_match('/^freetr[il1|]p\s+([1-5]{5})$/i', $sms, $matches);
то же самое вы можете сделать в любом месте шаблона сообщения (если хотите).
Я сделал что-то вроде этого (не уверен - это было 5 лет назад):
if (!preg_match('/^(\w+)\s+(.*)/i', $sms, $matches)) exit('bad message format');
$value = $matches[2];
// some letters look like digits
$value = str_replace(array('o', 'O'), 0);
$value = str_replace(array('i', 'I', 'l'), 1);
if (!preg_match('/^[12345]{5}/')) exit("invalid code");
// do something here... message is OK.
Конечно, в этом случае вы можете проверить "freetrip" или нет, значение [1-5] {5} или нет и т. Д., И ответить на вашу ошибку настолько, насколько позволяет ваше воображение :). Удачи.
РЕДАКТИРОВАТЬ: последний обновляется и должен соответствовать вашему случаю. Это лучше, потому что будет очень просто создать другой сервис на его примере, если он вам понадобится.