拆分街道,门牌号码和地址添加

时间:2014-06-19 11:30:21

标签: php regex preg-match

我使用正则表达式来分割荷兰街道,门牌号码和地址添加内容。 添加应该是可选的。

preg_match('/(?P<address>[^\d]+) (?P<number>[\d]+)(?P<numberAdd>[^\d]+)/', $input, $matches)

仅当$ input是例如Street 1A时才有效。但如果输入只是Street 1(没有添加),则不会。

那么如何将地址拆分为可选项?添加内容可能不包含数字。

2 个答案:

答案 0 :(得分:4)

您可以使用与批次匹配的单个正则表达式。它在this Gist中有所描述。此代码也可以使用德语地址。

var re = /^(\d*[\wäöüß\d '\-\.]+)[,\s]+(\d+)\s*([\wäöüß\d\-\/]*)$/i;

var adressen = [
  'Dorpstraat 2',
  'Dorpstr. 2',
  'Laan 1933 2',
  '18 Septemberplein 12',
  'Kerkstraat 42-f3',
  'Kerk straat 2b',
  '42nd street, 1337a',
  '1e Constantijn Huigensstraat 9b',
  'Maas-Waalweg 15',
  'De Dompelaar 1 B',
  'Kümmersbrucker Straße 2',
  'Friedrichstädter Straße 42-46',
  'Höhenstraße 5A',  
  'Saturnusstraat 60-75',
  'Saturnusstraat 60 - 75',
  '1, rue de l\'eglise'
], match;

adressen.forEach(function(adres) {
  match = adres.match(re)
  if (match) {
    match.shift(); // remove element 0 (the entire match)
    //match is now always an array with length of 3
    console.log(match.join('|'))
  } else {
    console.log('No match: '+adres)
  }
})

这是格式化的输出

Dorpstraat                   |    2 | 
Dorpstr.                     |    2 | 
Laan 1933                    |    2 | 
18 Septemberplein            |   12 | 
Kerkstraat                   |   42 | -f3 
Kerk straat                  |    2 | b 
42nd street                  | 1337 | a 
1e Constantijn Huigensstraat |    9 | b
Maas-Waalweg                 |   15 | 
De Dompelaar                 |    1 | B
Kümmersbrucker Straße        |    2 |
Friedrichstädter Straße      |   42 |-46
Höhenstraße                  |    5 | A
Saturnusstraat               |   60 | -75
Saturnusstraat 60 -          |   75 | //<-- problematic

No match: 1, rue de l'eglise

非常欢迎您提供正则表达式改进,但不要忘记它是否仍然匹配用于匹配的所有内容。

答案 1 :(得分:0)

尝试使用:

preg_match('/(?P<address>\D+) (?P<number>\d+)(?P<numberAdd>\D*)/', $input, $matches)