【问题标题】:Validation for PO Box address using Regex in .Net在 .Net 中使用正则表达式验证邮政信箱地址
【发布时间】:2011-11-08 00:33:09
【问题描述】:

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

"(?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 

以上示例在我当前的正则表达式中失败

【问题讨论】:

标签: .net regex


【解决方案1】:

对于邮政信箱,您会发现不可能涵盖所有情况。这显然是你可能不想听到的,但他们是休息时间。当一个人开始用谷歌搜索解决方案时,这一点非常明显,因为相信我,我调查过这个,有很多解决方案。我见过的所有解决方案,我都不太在意。

因此,您必须回到邮政信箱地址的规则/标准。可以在维基百科上找到。它的格式为 PO Box, P.O. Box, Postal Office Box, P Office Box, Postal Box, Post Box,仅举一些标准格式的例子,当人们编写正则表达式以确定地址是否为邮政信箱时,他/她的规则所依据的标准格式。

话虽如此,这是我的解决方案。这很简单,因为它必须如此,用户会在邮箱中放入太多愚蠢的方式。你必须假设 p 或 postal 或其他东西 p 开始一个邮政信箱的地址。这样,您就不会以 123 po 地址格式过滤具有单词 p 或 o 的某些变体的地址。我希望这是有道理的。

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

上面可以在http://www.rubular.com上测试,你需要去掉开头和结尾的正斜杠,并将i(不区分大小写的块中的文本字段放在右斜杠的右侧。

【讨论】:

    【解决方案2】:

    如果您知道输入的是邮政信箱,请先尝试过滤掉任何文本,然后仅使用其中的号码。或者,只是将字符串小写,然后去掉字母 p、o、s、t、f、i、c、e、b、x,如果还有字母,那就不行了。

    【讨论】:

      【解决方案3】:

      不确定在“邮局”后面没有“框”的情况下过滤它有多准确。 以下正则表达式满足您列表中除“123 post office”和“post office”之外的所有条件。

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

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

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2011-08-06
        • 1970-01-01
        • 2019-03-23
        • 1970-01-01
        • 1970-01-01
        • 2011-07-06
        • 2023-04-05
        • 1970-01-01
        相关资源
        最近更新 更多