地址字段验证的正则表达式

时间:2012-07-12 16:47:41

标签: regex

我正在尝试编写一个促进地址的正则表达式,例如21大走路或21圣伊丽莎白的驱动器我想出了以下正则表达式但我不太热衷于如何合并所有字符(字母数字,空间划线,句号,撇号)

"regexp=^[A-Za-z-0-99999999'

10 个答案:

答案 0 :(得分:20)

达姆,

有关使用正则表达式验证的地址,请参阅此问题的答案: regex street address match

问题是,街道地址的格式变化太大,以至于很难对它们进行编码。如果您正在尝试验证地址,那么根据其格式查找某个地址是否有效是非常困难的。 这将返回以下地址(253 N. Cherry St.),任何格式相同的地址:

\d{1,5}\s\w.\s(\b\w*\b\s){1,2}\w*\.

这允许门牌号码为1位数,空格,字符后跟句点(对于N.或S.),1-2字为街道名称,以缩写(如st。或RD)。

因为使用正则表达式来查看事物是否符合标准或协议(您定义的),您可能不希望允许上面提供的地址,尤其是第一个带破折号的地址,因为它们不是很标准。如果您愿意,可以修改上面的代码以允许它们 - 您可以添加

(-?)

允许破折号但不需要破折号。

此外,http://rubular.com/是学习正则表达式的快速互动方式。尝试使用上面的地址。

答案 1 :(得分:11)

如果您没有上述地址的固定格式,我会使用正则表达式来消除地址中未使用的符号(如专门的sybmols - &(%#$ ^ )。结果将是:

[A-Za-z0-9'\.\-\s\,]

答案 2 :(得分:5)

只需添加到Serzas'回答(因为没有足够的代表来评论)。 对于单词,字母和数字可以有效地替换为\ w。 另外,撇号,逗号,句号和连字符并不一定需要反斜杠。 我的要求还包括前后斜杠,以及最后用\ s的空格。对我而言,正在使用的正则表达式是:

pattern: "[\w',-\\/.\s]"

答案 3 :(得分:3)

我已成功使用;

Dim regexString = New stringbuilder
    With regexString
       .Append("(?<h>^[\d]+[ ])(?<s>.+$)|")                'find the 2013 1st ambonstreet 
       .Append("(?<s>^.*?)(?<h>[ ][\d]+[ ])(?<e>[\D]+$)|") 'find the 1-7-4 Dual Ampstreet 130 A
       .Append("(?<s>^[\D]+[ ])(?<h>[\d]+)(?<e>.*?$)|")    'find the Terheydenlaan 320 B3 
       .Append("(?<s>^.*?)(?<h>\d*?$)")                    'find the 245e oosterkade 9
    End With

    Dim Address As Match = Regex.Match(DataRow("customerAddressLine1"), regexString.ToString(), RegexOptions.Multiline)

    If Not String.IsNullOrEmpty(Address.Groups("s").Value) Then StreetName = Address.Groups("s").Value
    If Not String.IsNullOrEmpty(Address.Groups("h").Value) Then HouseNumber = Address.Groups("h").Value
    If Not String.IsNullOrEmpty(Address.Groups("e").Value) Then Extension = Address.Groups("e").Value

正则表达式将尝试查找结果,如果没有,则转移到下一个备选项。如果没有找到结果,则不存在4种形式。

答案 4 :(得分:3)

简单地址验证的正则表达式

use Symfony\Bundle\FrameWorkBundle\Controller\Controller;

E.g。用于地址匹配案例

^[#.0-9a-zA-Z\s,-]+$

E.g。对于地址不匹配案例

#1, North Street, Chennai - 11 

答案 5 :(得分:3)

这个对我有用:

\d+[ ](?:[A-Za-z0-9.-]+[ ]?)+(?:Avenue|Lane|Road|Boulevard|Drive|Street|Ave|Dr|Rd|Blvd|Ln|St)\.?

来源:https://www.codeproject.com/Tips/989012/Validate-and-Find-Addresses-with-RegEx

答案 6 :(得分:2)

正则表达式是这类任务的一个非常糟糕的选择。尝试查找Web服务或地址数据库或可以清理地址数据的产品。

相关:

答案 7 :(得分:1)

作为一个简单的单行表达式推荐这个,

^([a-zA-z0-9/\\''(),-\s]{2,255})$

答案 8 :(得分:0)

这是我使用正则表达式查找地址的方法:

一组模式对于从地址中查找我们可能期望的多种形式很有用,这些地址以简单的数字开头,然后是一组字符串(例如1 Basic Road),然后变得更加具体,例如寻找“ PO Box” ,“ c / o”,“ attn:”等

以下是在python中的简单测试。测试将找到所有地址,但找不到最后4个公司名称。该示例并不全面,但可以进行更改以适合您的需求并捕获您在数据中找到的示例。

import re
strings = [
    '701 FIFTH AVE',
    '2157 Henderson Highway',
    'Attn: Patent Docketing',
    'HOLLYWOOD, FL 33022-2480',
    '1940 DUKE STREET',
    '111 MONUMENT CIRCLE, SUITE 3700',
    'c/o Armstrong Teasdale LLP',
    '1 Almaden Boulevard',
    '999 Peachtree Street NE',
    'P.O. BOX 2903',
    '2040 MAIN STREET',
    '300 North Meridian Street',
    '465 Columbus Avenue',
    '1441 SEAMIST DR.',
    '2000 PENNSYLVANIA AVENUE, N.W.',
    '465 Columbus Avenue',
    '28 STATE STREET',
    'P.O, Drawer 800889.',
    '2200 CLARENDON BLVD.',
    '840 NORTH PLANKINTON AVENUE',
    '1025 Connecticut Avenue, NW',
    '340 Commercial Street',
    '799 Ninth Street, NW',
    '11318 Lazarro Ln',
    'P.O, Box 65745',
    'c/o Ballard Spahr LLP',
    '8210 SOUTHPARK TERRACE',
    '1130 Connecticut Ave., NW, Suite 420',
    '465 Columbus Avenue',
    "BANNER & WITCOFF , LTD",
    "CHIP LAW GROUP",
    "HAMMER & ASSOCIATES, P.C.",
    "MH2 TECHNOLOGY LAW GROUP, LLP",
]

patterns = [
    "c\/o [\w ]{2,}",
    "C\/O [\w ]{2,}",
    "P.O\. [\w ]{2,}",
    "P.O\, [\w ]{2,}",
    "[\w\.]{2,5} BOX [\d]{2,8}",
    "^[#\d]{1,7} [\w ]{2,}",
    "[A-Z]{2,2} [\d]{5,5}",
    "Attn: [\w]{2,}",
    "ATTN: [\w]{2,}",
    "Attention: [\w]{2,}",
    "ATTENTION: [\w]{2,}"
]
contact_list = []
total_count = len(strings)
found_count = 0
for string in strings:
    pat_no = 1
    for pattern in patterns:
        match = re.search(pattern, string.strip())
        if match:
            print("Item found: " + match.group(0) + " | Pattern no: " + str(pat_no))
            found_count += 1
        pat_no += 1

print("-- Total: " + str(total_count) + " Found: " + str(found_count)) 

答案 9 :(得分:0)

UiPath Academy 培训视频列出了美国地址的这个 RegEx(对我来说很好用):

\b\d{1,8}(-)?[a-z]?\W[a-z|\W|\.]{1,}\W(road|drive|avenue|boulevard|circle|street|lane|waylrd\.|st\.|dr\.|ave\.|blvd\.|cir\.|In\.|rd|dr|ave|blvd|cir|ln)