Faker 生成奇怪的 phone 数字?

Faker generating strange phone numbers?

所以我正在用 Laravel 创建一个数据库并对其进行播种,然后我 运行 遇到一个问题,它生成一个 phone 数字,如下所示:(635) 889-5802 x45134 .这会因超出数据库列的所需长度而导致问题。

所以我的问题是:

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

x#### 通常用于表示 phone 扩展名。通过查看 phone 号码提供商的 source code,没有删除扩展名的选项,因此您必须自己删除。

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

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

use Faker\Factory as Faker;

//...

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

Faker 将生成 GB 兼容 phone 数字等

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

 $table->string('phone_number');

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

'phone_number' => $faker->phoneNumber,

回答问题 3:

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

根据@CharlesDuffy 对 this question 的回答,以下将在 bash shell 中工作:

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

其中 'numbers' 是包含以假 phone 数字结尾的行的文件的名称。

这里的假设是 'x' 始终且仅出现在行尾的扩展名前面。我用 Python Faker 生成的 1000 个假数字对其进行了测试,并且有效。