我有一个表格,用户可以输入他/她的地址。街道编号和街道名称在同一文本字段中输入。我的数据库直接将街道号码存储在地址表中,而街道名称,城市,省份和邮政编码都有自己的表格(即它们是外键)*。
我想从街道地址字段解析int,以便我可以将数字和街道名称存储在适当的位置。我在这个页面上提到了解决方案:Extract numbers from a string。
问题是如果我的用户不小心在街道名称中输入了一个号码,那么使用该页面上的任何解决方案都会导致街道号码不正确。例如:
123 Som3estreet - > 1233
这里的正确方法是什么?
*注意:我不太确定这是否是最好的设计,所以如果有人有任何改进建议,我们将不胜感激。
答案 0 :(得分:2)
地址,尤其是国际地址,没有义务使用一致的格式。有些地址甚至没有数字,而是名称。仅仅因为这个原因,我个人就会结束这一努力。
但是,如果您确定某个地址会有一个数字,并且确保其正确至关重要,那么您最好的方法是为该数字要求一个单独的字段(表单输入),然后对其进行验证。< / p>
编辑:
简单的地址组织可能围绕第一行地址和代码。例如,在英国:123示例道路,AC1 2CD
这在整个国家都是独一无二的,足以让本地谷歌地图搜索找到正确的位置。所以你可以在这对上创建一个约束。
答案 1 :(得分:0)
您需要使用^
preg_match('/^[0-9]+/', $string, $m);
$number = $match[0];
echo $number; // 123
答案 2 :(得分:0)
好像你需要拿出号码
$string = '123 Som3estreet';
preg_match_all('!\d+!', $string , $matches);