文本输入需要将电话号码xxxxxxxxxxx在输入时转为xxx xxxx xxxx的格式,采用官方api文档示例不生效,想了解还有什么需要设置的地方?
@State phoneText: string = ''
TextInput({ placeholder: $r('app.string.input_phone_hint'), text: `${this.phoneText}` })
.onChange((number: string) => {
this.phoneText = this.loginViewModel.formatPhoneInput(number)
})
.cancelButton({
icon: {
src: $r('app.media.icon_iv_data_delete'),
size: 18
}
})
.backgroundColor(Color.Transparent)
.fontSize(18)
.type(InputType.Number)
.fontColor($r('app.color.cgws_color_FF333333_FFD1D1D1'))
.placeholderColor($r('app.color.cgws_color_FFC2C2C2_FF5C5C5C_1'))
.maxLength(this.loginViewModel.PHONE_NUM_TEXT_MAXSIZE_LENGTH)
public formatPhoneInput(number: string): string {
let phoneText = ''
let phoneNumberNoSpace: string = this.removeSpace(number);
if (phoneNumberNoSpace.length > this.PHONE_NUM_TEXT_MAXSIZE_LENGTH - 2) {
phoneText = phoneNumberNoSpace;
} else if (this.checkNeedNumberSpace(number)) {
if (phoneNumberNoSpace.length <= 3) {
phoneText = phoneNumberNoSpace;
} else {
let split1: string = phoneNumberNoSpace.substring(0, 3);
let split2: string = phoneNumberNoSpace.substring(3);
phoneText = split1 + ' ' + split2;
if (phoneNumberNoSpace.length > 7) {
split2 = phoneNumberNoSpace.substring(3, 7);
let split3: string = phoneNumberNoSpace.substring(7);
phoneText = split1 + ' ' + split2 + ' ' + split3;
}
}
} else {
phoneText = number;
}
return phoneText
}
checkNeedNumberSpace(numText: string) {
let isSpace: RegExp = new RegExp('[\\+;,#\\*]', 'g');
let isRule: RegExp = new RegExp('^\\+.*');
if (isSpace.test(numText)) {
// 如果电话号码里有特殊字符,就不加空格
if (isRule.test(numText)) {
return true;
} else {
return false;
}
}
return true;
}
removeSpace(str: string): string {
if (StrUtil.isEmpty(str)) {
return ''
}
return str.replace(new RegExp("[\\s]", "g"), '')
}
因为设置的InputType为Number类型,这是一个纯数字键盘,会自动过滤掉空格,所以不会有手机号格式化后 的效果,把InputType设置为normal类型时,即可
可以通过设置.inputFilter("[0-9]| ")过滤,只允许输入数字和空格