使用.Net中的Regex验证邮政信箱地址

时间:2011-11-08 00:33:09

标签: .net regex

我有以下正则表达式,但它不能满足我的要求。

"(?i)\b(?:p(?:ost)?\.?\s*[o0](?:ffice)?\.?\s*b(?:[o0]x)?|b[o0]x)"
123 post office 
123 post office box 
post office
po box
po 12 box
35 po box
PO.Box
p.o.box 

以上示例使用我当前的正则表达式失败

3 个答案:

答案 0 :(得分:1)

如果您知道输入是邮局信箱,请先尝试过滤掉任何文本,然后只使用其中的数字。或者,只需将字符串小写,然后剥去字母p,o,s,t,f,i,c,e,b,x,然后如果剩下任何字母,那就不好了。

答案 1 :(得分:1)

对于邮政信箱,您会发现无法涵盖所有​​案例。这显然是你可能不想听的东西,但主题是休息。当一个人开始谷歌搜索解决方案时,这是非常明显的,因为相信我,我调查了这个,有很多解决方案。我见过的所有解决方案,我都不太在意。

所以你必须回到邮政信箱地址所包含的规则/标准。人们可以在维基百科上找到它。它的格式为PO Box,P.O。 Box,Postal Office Box,P Office Box,Postal Box,Post Box,仅举几个标准格式的例子,在编写正则表达式时,根据他/她的规则确定地址是否为邮政信箱。 / p>

话虽如此,这是我的解决方案。它很简单,因为它必须是,用户放入po box的方式太多了。而你必须假设p或邮政或p开始po盒的地址。这样,您就不会过滤具有123 po地址格式的单词p或o的某些变体的地址。我希望这是有道理的。

/^p+(ostal|ost|\.| )*o*(ffice|\.| )*(box)*/i

以上内容可以在http://www.rubular.com上进行测试,你需要删除开始和结束正斜杠,然后将i(不区分大小写在块中的文本字段放在结束正斜杠的右侧)。

答案 2 :(得分:0)

不确定过滤“邮局”是多么准确,没有“邮箱”跟随它。 正则表达式满足除列表中“123邮局”和“邮局”之外的所有条件。

@"\bp*[o0]*(st)*(al)*\.*\s*[o0]*(ffice)*\.*\s*b+[o0]?x+\b"

如果您将"b+[o0]?x+"更改为"(b+[o0]?x+)*",它也会过滤这些内容。

希望这有帮助。