-1

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

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

谁能帮我实现这一目标?我对注册的经验。表达式为 0。

几个可能的例子可能是:

斯塔克街 14 号

斯塔克街 14a

堆栈溢出街 14

堆栈溢出街 141C

4

2 回答 2

0

对不起,但答案既有趣又严肃:

输入在哪里:

<input type=text name=streetAndNumberAndExtension />

你真的需要这样做:

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

全部扔在 1 堆上,然后尝试拆分它会很麻烦,需要手动检查所有字段并修复损坏的字段,然后才能被接受。对于程序员来说,并不是真正的解决方案。

于 2013-06-04T07:56:56.263 回答
0

尝试这个:

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

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

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

"Stackstreet"- 不包含数字==>街道名称。

"14a"- 包含一个数字==>数字。

这是如何检测字符串是否包含数字:

$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

于 2013-06-04T08:03:59.557 回答