首页 > 解决方案 > 欧芹错误消息 %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'},
  });

标签: parsley.js

解决方案


我已经写了一个解决方案,可能可以改进,但我什至不知道我现在是否需要这个。无论如何,如果其他人这样做,您可以添加以下代码:

      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'}
      });

推荐阅读