JOI 电子邮件验证
Posted
技术标签:
【中文标题】JOI 电子邮件验证【英文标题】:JOI email validation 【发布时间】:2020-01-18 04:57:14 【问题描述】:我使用 Joi 库作为我的 CRA 项目的独立验证器,但是在触发 email()
验证器时,我遇到了神秘错误
Uncaught Error: Built-in TLD list disabled
【问题讨论】:
【参考方案1】:如果您使用的是 joi 16.1.1,此版本中有一些更新,您可以在此处查看更多信息 docs。我想这会对你有所帮助
email: Joi.string().email( minDomainSegments: 2, tlds: allow: ['com', 'net'] )
【讨论】:
【参考方案2】:从 16.0.0 版本开始,joi 带有一个预构建的缩小版本,用于客户端开发。
大概是为了节省空间,Joi 的浏览器版本不包含默认的 TLD 列表。
(请参阅 Joi 存储库中的这些发行说明:https://github.com/hapijs/joi/issues/2037)
【讨论】:
【参考方案3】:来自 Joi documentation:
默认情况下,TLD 必须是 IANA 注册表中列出的有效名称。要禁用验证,请将 tlds 设置为 false。要自定义 TLD 的验证方式,请设置以下选项之一:
允许 - 之一:
true 以使用 IANA 注册 TLD 列表。这是默认设置 价值。 false 允许拒绝列表中未列出的任何 TLD(如果存在)。 允许的 TLD 的集合或数组。不能一起用 拒绝。禁用针对 IANA 接受列表的 TLD 验证:
email: Joi.string().email( tlds: allow: false );
这应该会禁用验证并允许您接受任何 TLD,即使它没有 IANA 注册。
【讨论】:
如果我们将“allow”设置为 true,那么它会抛出错误 Uncaught Error: Built-in TLD list disabled 即使我们只说电子邮件:Joi.string().email();然后它也抛出错误错误:内置 TLD 列表已禁用【参考方案4】:在 v16.0.0 的文档中:“浏览器构建不包括 TLD 电子邮件验证” 所以,我猜你必须在浏览器上将其设置为 false
【讨论】:
【参考方案5】:Joi 现在在其 package.json ('browser') 中有一个指令,它指示 Webpack 使用不包含 TLD 列表的精简版 Joi。
要继续使用完整版的 Joi(具有有效的 TLD 验证),您需要覆盖 webpack 配置。
首先是install Craco,它使您能够覆盖 CRA 的 webpack 配置。
然后将以下内容添加到您的 craco.config.js:
const path = require('path');
module.exports =
webpack:
configure:
resolve:
alias:
// ignore the cut down browser distribution that
// joi's package.json steers webpack to
joi: path.resolve(__dirname, 'node_modules/joi/lib/index.js'),
,
,
,
,
;
【讨论】:
以上是关于JOI 电子邮件验证的主要内容,如果未能解决你的问题,请参考以下文章