Я попробовал несколько шаблонов PO Box RegExp, найденных в Интернете, включая шаблоны, опубликованные в Stack Overflow, но ни один из них не прошел наши тестовые требования.Следовательно, я разместил наш RegExp ниже и наши тестовые наборы:
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"
];