parsley.js - 欧芹错误消息 %s1 中的单一要求
问题描述
嗨,我在 parsley.js 中有一个具有 2 个要求(参数/参数)的自定义验证器
对于错误消息,我只想显示其中一项要求,但我无法弄清楚如何
messages: {en: 'You must choose at least one language with %s'},
我认为 %s1 或 %s0 可能有用,但它们没有
%s 导致此消息:
您必须至少选择一种语言作为 [native,enrolment_form_new_instruction_languages_proficiency]
但我只想
您必须至少选择一种语言作为母语
这是我的完整验证器,以防帮助您回答:
Parsley.addValidator('oneChildEquals', {
requirementType: ['string', 'string'],
validateString: function(_value, requirement, requirement2, instance) {
var $inputs = $(instance.element).find("select.language-proficiency");
var valid = false;
$inputs.each(function(i){
if($(this).val() == requirement){
valid = true; // one input has the target value (requirement2)
return false; //break out of the loop
}
});
// no input has the target value (requirement2)
return valid;
},
messages: {en: 'You must choose at least one language with %s'},
});
解决方案
我已经写了一个解决方案,可能可以改进,但我什至不知道我现在是否需要这个。无论如何,如果其他人这样做,您可以添加以下代码:
if(typeof(string) === 'string' && typeof(parameters) === 'string' && parameters.match(/^\[.*\]$/) && string.match(/\%s\d/)){
//parameters are an array of values and string is trying to access them individually with %s1 to get first etc
var paramsArray = parameters.slice(1, parameters.length-1).split(',');
var interpolations = string.match(/\%s\d/g);
for(var j = 0; j < interpolations.length ; j++){
var interpolation = interpolations[j];
var number = parseInt(interpolation.replace("%s", ''));
if(isNaN(number)){
string = string.split(interpolation).join(interpolation + '[not a valid interpolation]');
}else {
var val = paramsArray[number-1];
if(typeof(val) === 'undefined'){
val = interpolation + '[not a valid interpolation]';
}
string = string.split(interpolation).join(val);
}
}
return string
}
在源代码中的这段代码之后
formatMessage: function formatMessage(string, parameters) {
if ('object' === _typeof(parameters)) {
for (var i in parameters) {
string = this.formatMessage(string, parameters[i]);
}
return string;
}
和之前
return 'string' === typeof string ? string.replace(/%s/i, parameters) : '';
然后它支持类似的东西
Parsley.addValidator('testParsley', {
requirementType: ['string','string'],
validateString: function(_value, requirement, requirement2) {
return (_value === requirement || _value === requirement2);
},
messages: {en: 'test parsley this field must equal %s1 or %s2'}
});
推荐阅读
- javafx-11 - 如何更改 scaleTransition 中的缩放枢轴点
- c++ - v8:Visual Studio 发布编译静态库错误:lld-link:错误:无法打开“obj/v8_wrappers.lib”:没有这样的文件或目录
- intellij-idea - 如何在 WebStorm 中将项目文件夹设置为不同的颜色
- python - 在可以创建点源nxn数组的内置函数或模块函数中?
- spring-boot - 使用 Specification 和 Pageable 仅选择 id
- mongodb - 使用 $in 运算符匹配 mongoengine 中的正则表达式
- git - 根据 git,一个提交是另一个提交的祖先,但也不是
- vue.js - 如何从模块的存储中引用根存储中的值?
- java - 使用 Spring Security 按角色限制 api 功能
- python - virtualenv 比 venv 快是什么意思?就在创作的时候?或者在运行应用程序和脚本时?