PHP - 用于在osCommerce和OpenCart之间转换地址格式的正则表达式?

时间:2013-03-14 11:01:48

标签: php regex opencart oscommerce street-address

我需要将使用osCommerce制作的整个电子商店导入OpenCart。到现在为止还挺好。我已经成功导入了几乎所有东西,除了SEO和一些稀疏数据位,但我的地址格式有问题。

osCommerce使用 $ firstname $ lastname $ cr $ streets $ cr $ city,$ postcode $ cr $ statecomma $ country ,而OpenCart使用 {company} {firstname} {lastname} {address_1 } {address_2} {postcode} {city} {country}

也许我错了,但看看这些字符串集之间的基本差异,我认为正则表达式是将osCommerce格式的地址格式字符串转换为OpenCart格式的地址格式字符串的合适工具。< / p> 但是,我在正则表达式中完全无效。有谁能告诉我哪种正则表达式最适合我的需要?或者,如果它没有正则表达式或者它们是一个坏主意,我应该尝试使用哪种方法?

2 个答案:

答案 0 :(得分:2)

我假设cr代表回车符或换行符,并且源字符串中有文字美元符号$

对于重新排序,您必须捕获地址的各个部分并在替换字符串中使用它们

^\$(.+?)\$(.+?)\$.\$(.+?)\$.\$(.+?)\$(.+?)\$.\$(.+?)\$(.+?)\$(.+)$

然后用

替换它
{}{$1}{$2}{$3}{}{$5}{$4}{$7}

所以这会变成

$re = '/^\\$(.+?)\\$(.+?)\\$.\\$(.+?)\\$.\\$(.+?)\\$(.+?)\\$.\\$(.+?)\\$(.+?)\\$(.+)$/s';
$replacement = '{}{$1}{$2}{$3}{}{$5}{$4}{$7}';
$new_address = preg_replace($re, $replacement, $address);

但您也可以使用explode进行拆分

$parts = explode('$', $address);

然后通过重新排序和插入大括号将部件再次放在一起。

答案 1 :(得分:1)

OpenCart地址存储为每个数据片段的单独字段。您提供的OC格式仅用于可视数据,如发票上的地址。但是,该地址的所有数据都有自己的字段,如果您查看addressorder表,就可以看到该字段。值得注意的是,地址也附有ISO代码,因此在导入时需要考虑到这一点,以避免出现问题。假设osCommerce以类似的方式存储数据(我没有亲自使用过),那么您只需要将旧列映射到新列。但是,如果它们存储为单个文本而您需要将其解压缩,则可以使用此

%^(\w+) (\w+)\s+([\w ]+)\s+([\w ]+)\s+([\w ]+)\s+([\w]+),\s*(\w+)$%

使用此作为示例地址进行测试

My Name
Street name
City name
P05T C0D3
State, Country