2013-07-03 6 views
1

어린이의 나이에 대한 입력을 확인하려고합니다. 유효한 값은 '< 1'및 1-29입니다.녹아웃 유효성 검사 - 사용자 지정 유효성 검사기

이렇게하려면 다음과 같은 사용자 지정 유효성 검사기를 만들려고합니다.

나는이 유효성 검사기가 순차적으로 작동한다고 가정하고 있습니다.

사용 사례 I "m 테스트 :

  1. 사용자가 30에 진입, 던져 오류 사용자가 0 또는 아무것도 입력
  2. 가 던져 오류
  3. '의 나이를 말 해주세요' '보다 29 일이 될 필요가있다'
  4. 사용자가 그들에 값을 변경 '< 1'하는 오류가 발생, '6개월'를 입력
  5. 사용자가 입력 '< 1'오류없이 사용자가 1 또는 2 또는 3 또는 4에 진입
  6. ..., 오류없는

나는이 테스트를 모두 통과하지 못했습니다. # 5가 실패합니다.

var ChildModel = function(cookieAge){ 
    var self = this, 
     age = cookieAge || ""; 
    self.age = ko.observable(age).extend({ 
     validation: [{ 
      validator: function (val) { 
       return val !== "" || parseInt(val,10) === 0; 
      }, 
      message: 'Please say how old this child is.' 
     },{ 
      validator: function (val, someOtherVal) { 
       return val=== "<1" || val <= someOtherVal; 
      }, 
      message: "This child's age must be less than or equal to 29.", 
      params: 29 
     },{ 
      validator: function (val) { 
       var text = val.match(/(\D+)/g); 
       log(text); 
       return val.match(/^[0-9].$/) || text && text.length > 0; 
      }, 
      message: "(contains text) For Children less than 1, please use '<1'" 
     }] 
    }); 
}; 

답변

3

두 개의 유효성 검사 규칙을 하나로 결합하면 일부 복잡성을 완화하는 데 도움이되는 것으로 나타났습니다. 결합 된 유효성 검사 규칙은 단락되고 제공된 값이 숫자 일 경우 true를 반환합니다. 그러면 값이 '< 1'과 일치하는지 실수로 확인하지 않습니다.

또한 isEmptyVal 유틸리티 메소드를 사용하여 값이 비어 있는지 감지하는 데 도움이되었습니다. validation:과 함께 내장 된 유효성 검사 규칙 중 일부를 사용해 보았지만 작동하지 않는 것으로 나타났습니다. 몇 가지 제한이 있습니다.

validation: [{ 
     validator: function (val) { 
      return !ko.validation.utils.isEmptyVal(val) && parseInt(val,10) !== 0; 
     }, 
     message: 'Please say how old this child is.' 
    },{ 
     validator: function (val, someOtherVal) { 
      if (!isNaN(val)) { 
       if (val > someOtherVal) { 
        this.message = "This child's age must be less than or equal to 29."; 
        return false; 
       } 
       return true; 
      } 

      if (val !== '<1') { 
       this.message = "(contains text) For Children less than 1, please use '<1'"; 
       return false; 
      } 
      return true; 
     }, 
     params: 29 
    }] 

바이올린 : http://jsfiddle.net/Rkkha/

+0

감사합니다! 감사합니다. – Scott

관련 문제