随笔——密码校验(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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值