【问题标题】:Faker generating strange phone numbers?伪造者生成奇怪的电话号码?
【发布时间】:2017-10-31 15:35:54
【问题描述】:

所以我正在使用 Laravel 创建一个数据库并为其播种,我遇到了一个问题,它会生成一个电话号码,如下所示:(635) 889-5802 x45134。这会通过超出数据库列的所需长度而导致问题。

所以我的问题是:

  1. 在实际层面上,为什么要这样做? x##### 的实际用例是什么?我环顾四周,找不到一个好的解释,最好的猜测是内部组织扩展。
  2. 在构建国际化最终可能很重要的应用程序时,构建对这些内容的支持是否是个好主意?如果是这样,那么扩大列宽对我来说将是一个更好的解决方案。
  3. 如果这不重要,有没有办法防止这些x##### 在生成时附加到号码上?我觉得这应该是一个选择。如果不是,听起来我最好的选择是自定义提供程序或正则表达式过滤器来删除这些值。

【问题讨论】:

  • 是的!那是大型建筑物/办公室的扩展代码。如果您的应用程序将针对企业和组织,则很可能会使用这些代码,并且您将希望获得对这些代码的支持。您还可以将扩展名存储在单独的字段/列中。
  • 分机用于内部交换,例如电话系统中的电话系统。
  • 就“你应该”而言,我会支持一个足够宽的字段以容纳最长的格式。如果您想解析和使用它们(因此是库),我肯定会read this FAQ(来自 Michael Mior 的回答)关于数字如何高度可变。数据存储很便宜。实际上,我认为它不是可选的原因是你必须考虑它。
  • 呜呜呜!这是处理所有用例变得非常烦人的事情之一——常见问题解答清楚地表明这比我想象的要复杂。这是一个知道在哪里划定支持线的真实案例。我的应用程序不会自己进行任何调用,并且大多数用例将仅限于美国 - 我目前的想法是我将尝试为所有美国号码建立适当的支持 - 因为我是其他地方的开源用户欢迎国家/地区提交拉取请求,以在其国家/地区的电话/zip 等系统中添加对怪癖的支持。

标签: php phone-number faker


【解决方案1】:

x#### 通常用于表示电话分机。通过查看电话号码提供商的source code,您无法删除分机,因此您必须自己动手。

不过,您不妨考虑阅读Falsehoods Programmers Believe About Phone Numbers

【讨论】:

  • 它会产生所有这些格式的数字吗?
  • 从我目前看到的情况来看,这并不是一个古怪的赌注。可以在存储库上提交问题,请求进一步支持格式选择。如果您没有对电话号码进行适当的清理,您的数据可能具有这种多样性,我可以看到随机格式对测试有价值的地方,因为如果您不为他们格式化,用户可能会提交格式不同的电话号码。也就是说,我们中的一些人的用例比其他人更窄 - 让我们选择我们的格式是有意义的。
  • 我猜最简单的方法是使用您想要的格式制作您自己的提供程序。这不是太具有挑战性。真的,您可以从现有的提供程序开始并删除大量代码。
【解决方案2】:

您需要确保伪造者使用正确的语言环境。试试这个:

use Faker\Factory as Faker;

//...

$faker = Faker::create('en_GB');

Faker 然后会生成与 GB 兼容的电话号码等

【讨论】:

    【解决方案3】:

    为了避免这个问题,你的迁移应该是这样的..

     $table->string('phone_number');
    

    你的播种机应该是这样的。

    'phone_number' => $faker->phoneNumber,
    

    【讨论】:

      【解决方案4】:

      回答你的问题 3:

      如果您不能或不想更改电话号码的伪造生成,您可以将它们写入文件并在之后过滤掉不需要的扩展名。

      根据@CharlesDuffy 对this question 的回答,以下内容将在 bash shell 中运行:

      $ while read -r; do echo "${REPLY%%x*}"; done <numbers >extensionsremoved
      

      其中“数字”是您的文件的名称,其中包含以假电话号码结尾的行。

      这里的假设是“x”总是且仅出现在行尾的扩展之前。我用Python Faker 生成的 1000 个假数字对其进行了测试,它成功了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-16
        • 1970-01-01
        • 2011-08-13
        相关资源
        最近更新 更多