【问题标题】:Italian Street Address Validation with PHP使用 PHP 进行意大利街道地址验证
【发布时间】:2019-08-24 01:17:50
【问题描述】:

我需要使用 PHPregex 验证意大利地址。 我必须这样写:

Via/Corso (meaning street)/Viale (boulevard)/Piazza (square) [road] (,) [civic number], [city] ([abbreviation of province]).

一个例子是:

  • 途经 Garibaldi 374,都灵 (TO)
  • Piazza San Pietro, 325, Cerveteri (RM)

我在之前的帖子中找到了完整澳大利亚地址的解决方案,但我不知道如何更改它。 以下是被认为有效的地址的代码和示例:

(15 Gordon St, 3121 Cremorne, Australia)

if(!(preg_match('/^(?:\\d+ [a-zA-Z ]+, ){2}[a-zA-Z ]+$/', trim($_POST["via"])))){
    $via_err = "This street is invalid, insert #, Street name, Zip Code, City, Country.";
} else
    $via = trim($_POST["via"]);

感谢所有可以帮助我解决这个问题的人。

【问题讨论】:

  • @Thefourthbird 那是not very good
  • @horcrux 啊,我明白了。我会删除评论。
  • 小心使用正则表达式解析地址。你真的应该使用地址验证服务/API。 This explains 为什么用正则表达式解析地址可能不好。 (免责声明:我目前在地址验证公司 SmartyStreets 工作)
  • 我不知道对于已经规范化为仅包含“Via”、“Piazza”等地址的某种地址数据库是否需要这样做,但在现实生活中它永远不会起作用。在意大利有很多其他的方式来称呼街道。例如检查米兰的 Alzaia Naviglio Grande。当然,大多数地址都使用您要求的字词,但这在现实生活中的应用程序中是不够的。

标签: php regex validation street-address


【解决方案1】:

你会想做这样的事情,只需确保使用i 标志运行它以使其不区分大小写:

(via|corso|viale|piazza) ([a-zA-Z ]+?),? (\d+), (\w+) \((\w+)\)

主要的棘手点是第一个开关,因为街道类型很多,所以有点乱。我只是注意到你实际上并不需要这些组,所以除了第一组括号之外,你可以去掉它们:

(via|corso|viale|piazza) [a-zA-Z ]+?,? \d+, \w+ \(\w+\)

不过,如果您想提取它们,它们不会受到伤害。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多