我有一个数据库,其中地址包含街道名称和街道号码(以及可能的添加,如A,B,C等)。
现在,我需要将街道名称,编号(如果有),添加到单独的字段中(对于与物流系统的链接)。
任何人都可以帮助我实现这一目标吗?我对reg的经验表达式为0。
几乎没有可能的例子:
Stackstreet 14
Stackstreet 14a
Stack Overflow street 14
Stack Overflow street 141C
答案 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。