【问题标题】:How to parse integer in PHP?如何在 PHP 中解析整数?
【发布时间】:2014-08-12 13:42:44
【问题描述】:

我有一个表单,用户可以在其中输入他/她的地址。街道号码和街道名称输入在同一文本字段中。我的数据库将街道号码直接存储在地址表中,而街道名称、城市、省和邮政编码都有自己的表(即它们是外键)*。

我想从 Street Address 字段解析 int,以便我可以将数字和街道名称存储在适当的位置。我参考了这个页面上的解决方案:Extract numbers from a string.

问题是,如果我的用户不小心在街道名称中输入了一个数字,那么使用该页面上的任何解决方案都会导致街道编号不正确。例如:

123 Som3estreet --> 1233

这里的正确方法是什么?

*注意:我不太确定这是否是最好的设计,所以如果有人有任何改进建议,将不胜感激。

【问题讨论】:

  • 在使用is_numeric()时对您的字段使用条件语句
  • 请详细说明,我是新手..
  • 我说的功能可以看这里>php.net/manual/en/function.is-numeric.php
  • 您可以找到与现有街道名称匹配的输入部分,并将剩下的部分视为街道编号。

标签: php parsing


【解决方案1】:

地址,尤其是国际地址,没有义务使用一致的格式。有些地址甚至没有数字,只有名字。仅出于这个原因,我会亲自结束这一努力。

但是,如果您确定某个地址将包含一个数字并且正确设置它至关重要,那么您最好的方法是要求一个单独的字段(表单输入)用于该数字,然后对其进行验证。

编辑:

简单的地址组织可能围绕第一行地址和代码。例如,在英国:123 Example Road, AC1 2CD

这在整个国家都是独一无二的,足以让当地的谷歌地图搜索找到正确的位置。所以你可以在这对上创建一个约束。

【讨论】:

  • 它们不是国际地址,只会输入加拿大地址。这就是为什么我把省份而不是国家。
  • 如果可以安全地假设第一行地址的格式,那么您可能会比大多数人更轻松。但是该解决方案仍然适用。
  • 加拿大任何地方都可能有贝克街 221b 号,也许在不列颠哥伦比亚省纳尔逊市?
  • 根据我的经验(在一家航运公司工作了几年),尝试解析地址是对边缘情况的永无止境的追捕(在我的情况下,地址也不是国际的)。拥有街道、号码和其他附加信息的单个文本字段是 imo 最佳选择。它还将使您的地址格式与大多数其他东西兼容。
  • 问题是,最初我只是要刮擦街道名称表并将街道地址(编号和名称)直接存储到我的地址表中。这样,只有cityprovincepostal code 将是指向它们自己的表的外键。这是一个员工数据库,所以如果我这样做可能会有很多重复..
【解决方案2】:

您需要使用^从字符串的开头进行匹配:

preg_match('/^[0-9]+/', $string, $m);
$number = $match[0];
echo $number; // 123

【讨论】:

    【解决方案3】:

    看来你需要取出号码

    $string = '123 Som3estreet';
    preg_match_all('!\d+!', $string , $matches);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-12
      • 1970-01-01
      • 2016-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多