I tried several PO Box RegExp patterns found on the internet including the ones posted on Stack Overflow, none of them passed our test requirements. Hence, I posted our RegExp below and our test sets:
var poBox = /^ *((#d+)|((box|bin)[-. /\]?d+)|(.*p[ .]? ?(o|0)[-. /\]? *-?((box|bin)|b|(#|num)?d+))|(p(ost)? *(o(ff(ice)?)?)? *((box|bin)|b)? *d+)|(p *-?/?(o)? *-?box)|post office box|((box|bin)|b) *(number|num|#)? *d+|(num|number|#) *d+)/i;
var matches = [ //"box" can be substituted for "bin"
"#123",
"Box 123",
"Box-122",
"Box122",
"HC73 P.O. Box 217",
"P O Box125",
"P. O. Box",
"P.O 123",
"P.O. Box 123",
"P.O. Box",
"P.O.B 123",
"P.O.B. 123",
"P.O.B.",
"P0 Box",
"PO 123",
"PO Box N",
"PO Box",
"PO-Box",
"POB 123",
"POB",
"POBOX123",
"Po Box",
"Post 123",
"Post Box 123",
"Post Office Box 123",
"Post Office Box",
"box #123",
"box 122",
"box 123",
"number 123",
"p box",
"p-o box",
"p-o-box",
"p.o box",
"p.o. box",
"p.o.-box",
"p.o.b. #123",
"p.o.b.",
"p/o box",
"po #123",
"po box 123",
"po box",
"po num123",
"po-box",
"pobox",
"pobox123",
"post office box"
];
var nonMatches = [
"The Postal Road",
"Box Hill",
"123 Some Street",
"Controller's Office",
"pollo St.",
"123 box canyon rd",
"777 Post Oak Blvd",
"PSC 477 Box 396",
"RR 1 Box 1020"
];