我有一个应用程序可以搜索地址数据库。页面访问者输入他或她的地址,应用程序会告诉他们他们是否已连接。使用正则表达式格式地址搜索
包含应搜索对信息的数据库的相关部分:
streetname "Stora gatan"
streetnumber "34"
streetletter "B"
address "Stora gatan 34B"
这个数据库是由我的客户提供的是,你可以看到,整齐地格式化。绝大绝大多数的数据,对于访问者搜索是:
"Stora gatan"
"Stora gatan 34"
"Stora gatan 34b"
"Stora gatan 34 b"
这些都是只有格式我目前在兴趣这是瑞典的应用程序,这是地址是如何格式化/中键入。瑞典。上述任何狂放版本(例如,如果用户应该搜索“34 Storgatan B”将不会匹配任何内容,并且这将是相当好的)
这也是非常不理想的,申请表应该有三个搜索字段而不是一个,所以在数据中是在一个字符串
现在,你可以看到,上述搜索条件之一将失败,尽管是一种合法的方式键入地址。它是一个之间的空间。地址的数字和字母
所以我写这个正则表达式来捕获所有传入的搜索,希望能加以按摩是正确的:
if (preg_match("/^(.*?)\s*(\d*?)\s*([A-Za-z]*?)$/", $address, $m)){
$streetname = uc_words($m[1]);
$streetnumber = trim($m[2]);
$streetletter = strtoupper($m[3]);
$search = trim($streetname . SPACE . $streetnumber . $streetletter);
}
不幸的是,这并不像我所希望的那样工作。得到的$ M看起来是这样上面我的每一个例子:
错误:
Array
(
[0] => Stora gatan
[1] => Stora
[2] =>
[3] => gatan
)
正确:
Array
(
[0] => Stora gatan 34
[1] => Stora gatan
[2] => 34
[3] =>
)
正确:
Array
(
[0] => Stora gatan 34b
[1] => Stora gatan
[2] => 34
[3] => b
)
你们是否有任何关于全部表达式的指针,或者你会建议在正则表达式之前做更多的if/else捕获?任何输入赞赏。
谢谢!
这或多或少是不可能的。人们用很多不同的方式写地址(顺便说一下,挪威在这里)。我宁愿去用户填写的多个字段。Streetadress,号码等等。如果用户在地址后输入逗号,该怎么办?这不会使你的正则表达式崩溃吗? – OptimusCrime