随笔——密码校验(ant design)

密码不能小于六位,至少含字母、数字、特殊字符其中的2种!(不能包括中文及中文符号)登陆时的密码校验(两次输入得相同)

法一:

                      <Form.Item
                  name="initPassword"
                  label="初始密码"
                  rules={
     [
                    {
     
                      validator: (rule, value, callback) => {
     
                        const oNumber = new RegExp(/\d/);
                        const oLetter = new RegExp(/[a-zA-Z]/);
                        const oSpecial = '.~!@#$%^&*()_+=-{}|:<>?,./[]-;\\"';

                        if (!value) {
     
                          callback('密码必填!');
                          return;
                        }

                        if (value.length < 6) {
     
                          callback('密码不能小于六位,至少含字母、数字、特殊字符其中的2种!');
                          return;
                        }

                        try {
     
                          [...value].forEach(val => {
     
                            if (
                              !(
                                oNumber.test(val) ||
                                oLetter.test(val) ||
                                oSpecial.indexOf(val) >= 0
                              )
                            ) {
     
                              throw new Error();
                            }
                          });
                        } catch (e) {
     
                          callback('密码不能小于六位,至少含字母、数字、特殊字符其中的2种!');
                        }

                        const contain: boolean[] = [];

                        [...value].forEach(val => {
     
                          if (oNumber.test(val)) {
     
                            contain[0] = true;
                          }
                          if (oLetter.test(val)) {
     
                            contain[1] = true;
                          }
                          if (oSpecial.indexOf(val) >= 0) {
     
                            contain[2] = true;
                          }
                        });

                        if (contain.filter(item => item === true).length < 2) {
     
                          callback('密码不能小于六位,至少含字母、数字、特殊字符其中的2种!');
                          return;
                        }
                        callback();
                      }
                    }
                  ]}
                >
                  <Input
                    onChange={
     () => {
     
                      setSaveFlag(() => false);
                    }}
                    disabled={
     disableFlag}
                    className="largeWidth"
                    placeholder="请输入初始密码"
                  />
                </Form.Item>
                

法二:

                <Form.Item
                  name="initPassword"
                  label="初始密码"
                  rules={
     [
                    {
     
                      validator: (rule, value) => {
     
                        const oNumber = '0123456789';
                        const oLetter = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
                        const oSpecial = '`.~!@#$%^&*()_+=-{}|:<>?,./[]-;\\"';
                        const oTher = oNumber + oLetter + oSpecial;
                        let total = 0;
                        const oSpeArr = value.split('');
                        const oNumberItem = oSpeArr.find(
                          (item: any) => oNumber.indexOf(item) !== -1
                        );
                        const oLetterItem = oSpeArr.find(
                          (item: any) => oLetter.indexOf(item) !== -1
                        );
                        const oSpeItem = oSpeArr.find((item: any) => oSpecial.indexOf(item) !== -1);
                        const oTherItem = oSpeArr.find((item: any) => oTher.indexOf(item) === -1);
                        if (!value) {
     
                          rule.message = '密码必填!';
                          return Promise.reject();
                        }
                        console.log(oNumberItem, oLetterItem, oSpeItem);
                        if (value.length < 6 || oTherItem !== undefined) {
     
                          rule.message = '密码不能小于六位,至少含字母、数字、特殊字符其中的2种!';
                          return Promise.reject();
                        }
                        if (oNumberItem !== undefined) {
     
                          total += 1;
                        }
                        if (oLetterItem !== undefined) {
     
                          total += 1;
                        }
                        if (oSpeItem !== undefined) {
     
                          total += 1;
                        }
                        if (total >= 2) {
     
                          return Promise.resolve();
                        }
                        rule.message = '密码不能小于六位,至少含字母、数字、特殊字符其中的2种!';
                        return Promise.reject();
                      }
                    }
                  ]}
                >
                  <Input
                    onChange={
     () => {
     
                      setSaveFlag(() => false);
                    }}
                    disabled={
     disableFlag}
                    className="largeWidth"
                    placeholder="请输入初始密码"
                  />
                </Form.Item>

你可能感兴趣的:(随笔,ant,design,reactjs,ant,design)