正则表达式验证地址字符串不包含邮政信箱模式

Sev*_*kov 4 php regex validation laravel laravel-validation

我正在Laravel regex validation用户提供的地址字段上使用。

我发现多个帖子有助于验证地址字符串是否为有效的邮政信箱,例如此处此处,但我需要执行相反的操作并确保提供的字符串不是邮政信箱。

PS 我不需要进行任何地址验证,只是想确保它不是邮政信箱。

我发现这条规则非常有用,因为它检查邮政信箱号码是否存在

/^\s*(.*((p|post)[-.\s]*(o|off|office)[-.\s]*(b|box|bin)[-.\s]*)|.*((p|post)[-.\s]*(o|off|office)[-.\s]*)|.*((p|post)[-.\s]*(b|box|bin)[-.\s]*)|(box|bin)[-.\s]*)(#|n|num|number)?\s*\d+/i
Run Code Online (Sandbox Code Playgroud)

有人可以帮我为这个或类似的东西创建相反的表达吗?

我怀疑我必须使用负前瞻?!

Sev*_*kov 8

使用正则表达式解决了这个问题negative lookahead ?!

/^(?!.*(?:(.*((p|post)[-.\s]*(o|off|office)[-.\s]*(box|bin)[-.\s]*)|.*((p |post)[-.\s]*(box|bin)[-.\s]*)))).*$/i
Run Code Online (Sandbox Code Playgroud)

此规则不要求提供邮政信箱号码。

这些是会通过的例子:

        "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",
        "Coop services",
        "65 Brook Ave Ste 1P",
        "pacific city",
        "orange county",
        "obox",
        "pbox",
        "party house",
        "p shorty",
        "something pacif pobo",
        "po helpkline box",
        "po ferrirs",
        "panther boxing",
        "box center",
        "post office",
        "Post",
        "porceline"
Run Code Online (Sandbox Code Playgroud)

这些将无法通过验证

        "post office box",
        "POBOX",
        "po box",
        "POBox12234",
        "p o box",
        "P.O.Box",
        "HC73 P.O. Box 217",
        "P O Box125",
        "P. O. Box",
        "P.O. Box 123",
        "P.O. Box",
        "PO Box N",
        "PO Box",
        "PO-Box",
        "POBOX123",
        "Po Box",
        "Post Box 123",
        "Post Office Box 123",
        "Post Office Box",
        "p box",
        "p-o box",
        "p-o-box",
        "p.o box",
        "p.o. box",
        "p.o.-box",
        "po box 123",
        "po box",
        "po-box",
        "pobox",
        "pobox123",
Run Code Online (Sandbox Code Playgroud)