嗨,我在parsley.js中有一个具有2个要求(参数/参数)的自定义验证器
对于错误消息,我只想显示其中一项要求,但我无法确定如何做
messages: {en: 'You must choose at least one language with %s'},
我以为%s1或%s0可能有用,但它们不起作用
%s导致显示此消息:
您必须至少选择一种语言作为[母语,注册形式_新_说明语言_熟练程度]
但我只想
您必须选择至少一种语言作为母语
这里是我的完整验证器,以帮助您回答:
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'} });