密码不能小于六位,至少含字母、数字、特殊字符其中的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>