我有一个数据库,其中地址包含街道名称和街道编号(以及可能的添加,如 A、B、C 等)。
现在我需要将街道名称、编号以及如果可用的话,添加到单独的字段中(用于与物流系统的链接)。
谁能帮我实现这一目标?我对注册的经验。表达式为 0。
几个可能的例子可能是:
斯塔克街 14 号
斯塔克街 14a
堆栈溢出街 14
堆栈溢出街 141C
对不起,但答案既有趣又严肃:
输入在哪里:
<input type=text name=streetAndNumberAndExtension />
你真的需要这样做:
<input type=text name=street />
<input type=text name=number />
<input type=text name=extension/>
全部扔在 1 堆上,然后尝试拆分它会很麻烦,需要手动检查所有字段并修复损坏的字段,然后才能被接受。对于程序员来说,并不是真正的解决方案。
尝试这个:
$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。