正则表达式验证地址字符串不包含邮政信箱模式
Posted
技术标签:
【中文标题】正则表达式验证地址字符串不包含邮政信箱模式【英文标题】:Regex validate address string to not contain PO Box patterns 【发布时间】:2019-03-23 15:39:15 【问题描述】:我在用户提供的地址字段上使用Laravel regex validation
。
我发现多个帖子有助于验证地址字符串是否是有效的邮政信箱,例如 here 或 here,但我需要做相反的事情并确保提供的字符串不是邮政信箱。
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
有人可以帮我为这个或类似的东西创建相反的表达吗?
我怀疑我必须使用负前瞻?!
【问题讨论】:
您应有尽有。提取备选方案,将它们放入一个组(?:...|...|...|....)
,然后将该组放入^(?!.*<group>).*$
@WiktorStribiżew 你把它标记为重复,只给了我一个提示,我仍然无法解决这个问题,因为我不太擅长正则表达式
我认为除了你自己之外没有人可以帮助你,因为your pattern is not valid。一旦您知道模式中的确切分支,提示就足够了。
@WiktorStribiżew 我能够解决这个问题,因为您将其标记为重复,所以无法发布答案,我认为这可能对可能遇到相同问题的人有用
请修复您在帖子中首先尝试的第二个正则表达式,某处有错字。
【参考方案1】:
使用正则表达式解决了它negative lookahead ?!
/^(?!.*(?:(.*((p|post)[-.\s]*(o|off|office)[-.\s]*(box|bin)[-.\s]*)|.*((p |post)[-.\s]*(box|bin)[-.\s]*)))).*$/i
此规则不要求提供邮政信箱号码。
这些是可以通过的例子:
"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 *** 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"
那些将无法通过验证
"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",
【讨论】:
我找了一个小时,找到了一百个如何匹配 P.O.框,但不知道如何匹配不是 P.O. 的地址盒子。您的 RegEx 正是我所需要的,而且效果很好。谢谢! 如何用javascript写这个表达式以上是关于正则表达式验证地址字符串不包含邮政信箱模式的主要内容,如果未能解决你的问题,请参考以下文章