regex 如何用PHP区分街道名称和门牌号?

gtlvzcf8  于 2023-11-20  发布在  PHP
关注(0)|答案(2)|浏览(122)

在德国,我们有街道名称和门牌号。我使用的数据库中,两者都存储在一个列中(例如“Arnoldstraße 12”),我想将两者分离到单个变量中。
我有这样的代码:

$street= $row[2]; //This row is from an array with values of the database. The other rows are submitted perfectly.
preg_match('/([^\d]+)(\d+.*)/', $street, $matches);
$street_new = trim($matches[1]);
$house_number= trim($matches[2]);  

while ($row = $jobDB->fetchArray($result)) {
        $this->setReturnValue('strasse', $street_new);
        $this->setReturnValue('hausnummer', $house_number);
        return;
    }

字符串
之后,我使用JS-Code将该值(以及更多值)放入网站上的一个表单中。其他值都没有问题,只是缺少街道名称和门牌号。
下面是JS代码:

var auto_complete = function() { 
    var kontonr = jr_get_value('tb_kundennummer');
    jr_execute_dialog_function('autoComplete', {kontonummer: kontonr}, mySuccessCallback);    
}

var mySuccessCallback = function(returnObject) {
    jr_set_value('tb_kunde_strasse', returnObject.result.street_new); 
    jr_set_value('tb_kunde_hausnummer', returnObject.result.house_number);
}


我做错了什么?
谢谢你提前!:)

xuo3flqw

xuo3flqw1#

好了,我找到了一个解决方案。在将代码添加到while循环后,它运行得很好:

while ($row = $jobDB->fetchArray($result)) {            
          $street= $row[2];
          preg_match('/([^\d]+)(\d+.*)/', $street, $matches); 
          $street= trim($matches[1]);
          $house_number= trim($matches[2]);
            
          $this->setReturnValue('strasse', $street);
          $this->setReturnValue('hausnummer', $house_number);

        return;
    }

字符串
我不是一个很好的开发人员,但可能是因为$row只有在fetchArray之后调用时才有效。

llew8vvj

llew8vvj2#

如果你需要一个函数来做这件事,你可以使用这个:

/**
 * splits Number from street
 * 
 * @param string $strAndNumber 
 * @return array with 'street' and 'houseNumber'
 */
public static function splitStreetAndHousNumber($strAndNumber) {
    $pattern = '/^(.*?)\s*(\d+[a-zA-Z]{0,1})$/'; 
    if (preg_match($pattern, $strAndNumber, $matches)) {
        $street = trim($matches[1]);
        $houseNumber = trim($matches[2]);
        return array('street' => $street, 'houseNumber' => $houseNumber);
    } else {
        return array('street' => $strAndNumber, 'houseNumber' => '');
    }
}

字符串

相关问题