代码之家  ›  专栏  ›  技术社区  ›  S. N

对react中的密码字段进行自定义验证

  •  0
  • S. N  · 技术社区  · 7 年前

    我正在创建一个只有2个值的自定义注册页,电子邮件和密码,稍后我也将添加确认密码,对于我的密码字段,我有一些限制,我使用一些regex和一些自定义代码进行验证。

    这是我的验证字段:

    validateField(fieldName, value) {
        let fieldValidationErrors = this.state.formErrors;
        let emailValid = this.state.emailValid;
        let passwordValid = this.state.passwordValid;
        //let passwordValidConfirm = this.state.passwordConfirmValid;
        switch(fieldName) {
          case 'email':
            emailValid = value.match(/^([\w.%+-]+)@([\w-]+\.)+([\w]{2,})$/i);
            fieldValidationErrors.email = emailValid ? '' : ' is invalid';
            break;
          case 'password':
            passwordValid = (value.length >= 5 &&  value.length <= 32) && (value.match(/[i,o,l]/) === null) && /^[a-z]+$/.test(value) && this.check4pairs(value) && this.check3InRow(value);
            fieldValidationErrors.password = passwordValid ? '': ' is not valid';
            break;
          default:
            break;
        }
        this.setState({formErrors: fieldValidationErrors,
                        emailValid: emailValid,
                        passwordValid: passwordValid,
                        //passwordValidConfirm: passwordValidConfirm
                      }, this.validateForm);
      }
    

    如你所见

    密码有效

    我做了一些方法,这个

    支票三行

    它不会按我希望的方式工作,这一个可以确保,字符串中至少有3个字母在一行中,如“abc”、“bce”或“xyz”。

    check3InRow(value){
        var counter3 = 0;
        var lastC = 0;
        for (var i = 0; i < value.length; i++) {
          if((lastC + 1) === value.charCodeAt(i)){
            counter3++;
            if(counter3 >= 3){
              alert(value);
              return true;
            }
          }
          else{
            counter3 = 0;
          }
          lastC = value.charCodeAt(i);
        }
        return false;
      }
    

    这无法正常工作,因此应接受:

    美国广播公司协会

    作为密码,但不是:

    AABC

    2 回复  |  直到 7 年前
        1
  •  1
  •   Sookie Singh    7 年前

    check3InRow(value) {
        var counter3 = 1;
        var lastC = 0;
        for (var i = 0; i < value.length; i++) {
            if ((lastC + 1) === value.charCodeAt(i)) {
                counter3++;
                if (counter3 >= 3) {
                    alert(value);
                    return true;
                }
            } else {
                counter3 = 1;
            }
            lastC = value.charCodeAt(i);
        }
        return false;
    }
    
        2
  •  0
  •   Aritra Chakraborty    7 年前

    function check3InRow2(value){
        for (var i = 0; i < value.length-2; i++) {
            const first = value.charCodeAt(i);
            const second = value.charCodeAt(i+1);
            const third = value.charCodeAt(i+2);
            if(Math.abs(second - first)  === 1 && Math.abs(third-second) === 1){
                return true;
            }
        }
        return false;
    }
    

    function check3InRow(value) {
        var counter3 = 1;
        var lastC = value.charCodeAt(0);
        for (var i = 1; i < value.length; i++) {
            if ((lastC + 1) === value.charCodeAt(i)) {
                counter3++;
                if (counter3 >= 3) {
                    return true;
                }
            } else {
                counter3 = 1;
            }
            lastC = value.charCodeAt(i);
        }
        return false;
    }