我使用正则表达式来分割荷兰街道,门牌号码和地址添加内容。 添加应该是可选的。
preg_match('/(?P<address>[^\d]+) (?P<number>[\d]+)(?P<numberAdd>[^\d]+)/', $input, $matches)
仅当$ input是例如Street 1A时才有效。但如果输入只是Street 1(没有添加),则不会。
那么如何将地址拆分为可选项?添加内容可能不包含数字。
答案 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)