Глядя на проверку почтового ящика, но хотел знать, существует ли такая проверка. У меня есть поле адреса, разделенное на адрес 1 и адрес 2 (куда пойдет информация о PO, Apt, Suite)
Пример:
Address 1: 123 Main Street
Address 2: Suite 100
City: Any Town
State: Any State
Zip: Any Zip
Почтовый ящик (может также сабвуфер для коробки) Примеры:
- PO Box 123
- P.O. Коробка 123
- PO 123
- Почтовый ящик 123
- P.O 123
- Коробка 123
123
- 123
- POB 123
- P.O.B 123
- P.O.B. 123
- Пост 123
- Почтовый ящик 123
(я знаю, что, возможно, мне нужно еще кое-что проверить, но я могу об этом подумать, не стесняйтесь добавлять или исправлять)
Я знаю, что для этого лучше всего подойдет RegEx, и я видел другие вопросы по стеку # 1 , # 2
Используя RegEx из другого вопроса, я получаю хорошие результаты, но он пропускает некоторые, я думаю, что должен поймать
$arr = array (
'PO Box 123',
'P.O. Box 123',
'PO 123',
'Post Office Box 123',
'P.O 123',
'Box 123',
'#123', // no match
'123', // no match
'POB 123',
'P.O.B 123', // no match
'P.O.B. 123', // no match
'Post 123', // no match
'Post Box 123' // no match
);
foreach($arr as $po) {
if(preg_match("/^\s*((P(OST)?.?\s*O(FF(ICE)?)?.?\s+(B(IN|OX))?)|B(IN|OX))/i", $po)) {
echo "A match was found: $po\n";
} else {
echo "A match was not found: |$po| \n";
}
}
Почему он не перехватывает два последних значения в массиве?