Looking to validate PO Box but wanted to know if such validation existed. I have the Address field split into Address 1 and Address 2 (Where such PO, Apt, Suite info would go)
Example:
Address 1: 123 Main Street
Address 2: Suite 100
City: Any Town
State: Any State
Zip: Any Zip
PO Box (Can sub BIN for BOX as well) Examples:
- PO Box 123
- P.O. Box 123
- PO 123
- Post Office Box 123
- P.O 123
- Box 123
123
- 123
- POB 123
- P.O.B 123
- P.O.B. 123
- Post 123
- Post Box 123
(I know there are probably more I need to validate for but this is what I could think of, feel free to add or correct)
I know a RegEx would be best for this and I've seen the other questions on Stack #1, #2
Using the RegEx from the other question I get good results but it misses some I think it should catch
$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";
}
}
Why is it not catching the last two values in the array?