首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >punycode和cyrillic的Yup域名验证

punycode和cyrillic的Yup域名验证
EN

Stack Overflow用户
提问于 2019-04-02 16:28:27
回答 1查看 1.5K关注 0票数 1

如果你在Cyrillic域名验证方面遇到问题,这个解决方案可能会有所帮助。

我们的Yup验证将如下所示

代码语言:javascript
复制
export const Domain = yup.object().noUnknown().shape({
  domain: yup.string().domain().required(),
});
EN

回答 1

Stack Overflow用户

发布于 2019-04-02 16:28:27

在本教程中,我们将使用扩展标准yup验证的yup.addMethod。

现在我们应该导入模块并定义正则表达式。

代码语言:javascript
复制
import * as yup from 'yup';

const patterns = [
  domain: /^(?!:\/\/)([a-zA-Z0-9-_]+\.)*[a-zA-Z0-9][a-zA-Z0-9-_]+\.[a-zA-Z]{2,11}?$/,
  punycode: /^([A-Za-z0-9](?:(?:[-A-Za-z0-9]){0,61}[A-Za-z0-9])?(?:\.[A-Za-z0-9](?:(?:[-A-Za-z0-9]){0,61}[A-Za-z0-9])?)*)(\.?)$/,
  cyrillicDomain: /^((http|https):\/\/)?[a-zа-я0-9]+([\-\.]{1}[a-zа-я0-9]+)*\.[a-zа-я]{2,5}(:[0-9]{1,5})?(\/.*)?$/i,
];

扩展标准模式

代码语言:javascript
复制
yup.addMethod(yup.string, 'domain', function pattern(name, message = VALIDATION_ERRORS.domain) {
  const domainRules = [patterns.domain, patterns.punycode, patterns.cyrillicDomain];

  return this.test({
    message,
    test: value => (value === null || value === '' || value === undefined) || domainRules.some(regex => regex.test(value)),
  });
});

下一步是在yup模式中添加验证

代码语言:javascript
复制
export const Domain = yup.object().noUnknown().shape({
  domain: yup.string().domain().required(),
});

我们正在生产中使用这个例子,它工作得很好。

祝好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55470171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档