Faker产生奇怪的电话号码?

时间:2017-05-31 01:59:02

标签: php phone-number faker

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

所以我的问题是:

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

4 个答案:

答案 0 :(得分:1)

x####通常用于表示电话分机。通过查看电话号码提供商的source code,您无法删除该扩展程序,因此您必须自行完成此操作。

但是,您可能需要考虑阅读Falsehoods Programmers Believe About Phone Numbers

答案 1 :(得分:1)

您需要确保faker使用正确的区域设置。试试这个:

use Faker\Factory as Faker;

//...

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

Faker将生成与GB兼容的电话号码等

答案 2 :(得分:0)

为避免此问题,您的迁移应像这样。

 $table->string('phone_number');

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

'phone_number' => $faker->phoneNumber,

答案 3 :(得分:0)

回答您的问题 3:

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

基于@CharlesDuffy 对 this question 的回答,以下内容将在 bash shell 中工作:

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

其中“numbers”是包含以假电话号码结尾的行的文件名。

这里的假设是“x”总是并且只出现在行尾的扩展名前面。我用 Python Faker 生成的 1000 个假数字对其进行了测试,结果奏效了。