如果您在验证西里尔文域名时遇到问题,是的,此解决方案可能会有所帮助。
我们的 Yup 验证看起来像这样
export const Domain = yup.object().noUnknown().shape({
domain: yup.string().domain().required(),
});
如果您在验证西里尔文域名时遇到问题,是的,此解决方案可能会有所帮助。
我们的 Yup 验证看起来像这样
export const Domain = yup.object().noUnknown().shape({
domain: yup.string().domain().required(),
});
在本教程中,我们将使用扩展标准 yup 验证的 yup.addMethod。
现在我们应该导入模块并定义正则表达式。
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,
];
扩展标准模式
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 模式中添加您的验证
export const Domain = yup.object().noUnknown().shape({
domain: yup.string().domain().required(),
});
我们在生产中使用这个例子,它运行良好。
祝你好运!