需求:
input框里最多输入8个字符,具体要求如下。
-
2个字符=1个汉字=1个全角=2个字母=2个半角=2个空格
-
IF定义1个汉字=1个全角=a,1个字母=1个半角=b
-
最多输入8个字符,有以下组合,无顺序限制:baaa、bbaaa、bbbaa、bbbbaa、bbbbba、bbbbbba、bbbbbbb、bbbbbbbbb、aaaa
直接上代码吧:
<FormItem {...formItemLayout} label={XXXX}>
{getFieldDecorator('xxx', {
initialValue: station.xxx,
rules: [
{
validator: checkFormat, // 自定义的验证方法
message: xxx,
},
],
})(<Input placeholder={XXXX} />)}
</FormItem>
// 自定义方法判断字符是否超过八个
const checkFormat = useCallback((rule, value) => {
console.log(value, rule);
// value就是我们输入的值。
let len = 0;
for (let i = 0; i < value.length; i++) {
if (value.charCodeAt(i) > 127 || value.charCodeAt(i) === 94) {
len += 2;
} else {
len++;
}
}
if (len > 8) {
return Promise.reject(rule.message);
} else return Promise.resolve();
}, []);