提取街道名称和号码

时间:2013-06-04 07:39:47

标签: php mysql

我有一个数据库,其中地址包含街道名称和街道号码(以及可能的添加,如A,B,C等)。

现在,我需要将街道名称,编号(如果有),添加到单独的字段中(对于与物流系统的链接)。

任何人都可以帮助我实现这一目标吗?我对reg的经验表达式为0。

几乎没有可能的例子:

  

Stackstreet 14

     

Stackstreet 14a

     

Stack Overflow street 14

     

Stack Overflow street 141C

2 个答案:

答案 0 :(得分:0)

很抱歉,但答案与严肃一样有趣:

输入为:

<input type=text name=streetAndNumberAndExtension />

你真的需要这样做:

<input type=text name=street />
<input type=text name=number />
<input type=text name=extension/>

将所有东西扔到1堆上然后试图拆分它将是hacky并且需要手动检查所有字段并修复损坏的字段才能被接受。对于程序员来说,并不是真正的解决方案。

答案 1 :(得分:0)

试试这个:

$str = 'Stackstreet 14a';
$matches= explode(" ", $str);
print_r($matches);

之后,您可以检查$ matches an中的每个项目,以检测项目是否包含数字。如果该项目包含他的数字,那么他的部分街道名称。 例如:

$matches= Array ( [0] => Stackstreet [1] => 14a )

"Stackstreet" - 不包含数字==&gt;街道名称。

"14a" - 包含数字==&gt;数字。

这是检测字符串是否包含数字的方法:

$myString="14a";
if (preg_match('/[A-Za-z].*[0-9]|[0-9].*[A-Za-z]/', $myString))
{
    echo 'Contains at least one letter and one number';
}

另一种方式:

根据b01

试试这个,看看它是否适合你:

$subjects = array( "street 12", "street12", "street 12a", "street12a" );
foreach( $subjects as $subject )
{
    if ( preg_match('/([^\d]+)\s?(.+)/i', $subject, $result) )
    {
       var_dump( $result );
    }
}
die_r( $result  );

您需要的唯一部分是:

// Find a match and store it in $result.
if ( preg_match('/([^\d]+)\s?(.+)/i', $subject, $result) )
{
    // $result[1] will have the steet name
    $streetName = $result[1];
    // and $result[2] is the number part. 
    $streetNumber = $result[2];
}

归功于 b01