HarmonyOS TextInput问题

理论上,在input大于maxsize后不能输入才对,实际上可以继续输入。

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
aquaa

如果有需要可自行进行限制输入上限,这边提供一个可用demo参考:

@Entry
@Component
struct phone_example {
  @State submitValue: string = ''
  @State text : string = ''
  @State isEnable : boolean = true
  @State saveText : string = ""
  @State count : number = 1
  public readonly NUM_TEXT_MAXSIZE_LENGTH = 14;
  isEmpty(str?: string): boolean {
    return str == 'undefined' || !str || !new RegExp("[^\\s]").test(str);
  }

  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 (this.isEmpty(str)) {
      return '';
    }
    return str.replace(new RegExp("[\\s]", "g"), '');
  }

  build() {
    Column() {
      Row() {
        TextInput({ text: `${this.text}` })
          .type(InputType.PhoneNumber)
          .height('48vp')
          .onChange((number: string) => {
            this.text = number//text需要变化才能重新渲染TextInput组件
            if(this.count != 1){
              this.text = this.saveText
              console.log('eee:' + this.text)
            }else {
              let teleNumberNoSpace: string = this.removeSpace(number);
              if (teleNumberNoSpace.length > this.NUM_TEXT_MAXSIZE_LENGTH - 2) {
                this.text = teleNumberNoSpace;
              }
              else if (this.checkNeedNumberSpace(number)) {
                if (teleNumberNoSpace.length <= 3) {
                  this.text = teleNumberNoSpace;
                } else {
                  let split1: string = teleNumberNoSpace.substring(0, 3);
                  let split2: string = teleNumberNoSpace.substring(3);
                  this.text = split1 + ' ' + split2;
                  if (teleNumberNoSpace.length > 7) {
                    split2 = teleNumberNoSpace.substring(3, 7);
                    let split3: string = teleNumberNoSpace.substring(7);
                    this.text = split1 + ' ' + split2 + ' ' + split3;
                    if(teleNumberNoSpace.length == 11 && this.count == 1 ){//达到11位时保存变量并设置count++
                      this.saveText = this.text
                      console.log(this.saveText)
                      this.count ++
                    }
                  }
                }
              } else if (teleNumberNoSpace.length > 8) {
                console.log('success:' + teleNumberNoSpace.length)
                let split4 = teleNumberNoSpace.substring(0, 8);
                let split5 = teleNumberNoSpace.substring(8);
                this.text = split4 + ' ' + split5;
              } else {
                this.text = number;
              }
            }
          })
      }
    }
    .width('100%')
    .height("100%")
  }
}
分享
微博
QQ
微信
回复
2天前
相关问题
HarmonyOS TextInput 换行问题
760浏览 • 1回复 待解决
HarmonyOS TextInput焦点问题
431浏览 • 1回复 待解决
HarmonyOS TextInput 组件问题
507浏览 • 1回复 待解决
HarmonyOS TextInput组件错误样式问题
610浏览 • 1回复 待解决
HarmonyOS TextInput自动获取焦点问题
119浏览 • 1回复 待解决
HarmonyOS textinput键盘弹出问题
55浏览 • 1回复 待解决
HarmonyOS TextInput clearButton 位置问题
129浏览 • 1回复 待解决
HarmonyOS TextInput调用系统键盘问题
288浏览 • 1回复 待解决
HarmonyOS TextInput和键盘相关问题咨询
564浏览 • 1回复 待解决
HarmonyOS TextInput自定义键盘问题
644浏览 • 1回复 待解决
HarmonyOS TextInput绑定自定义键盘问题
588浏览 • 1回复 待解决
HarmonyOS TextInput如何换行输入
38浏览 • 1回复 待解决
HarmonyOS TextInput 取消默认焦点
552浏览 • 1回复 待解决
HarmonyOS TextInput支持禁止粘贴
9浏览 • 1回复 待解决
HarmonyOS TextInput组件的使用
30浏览 • 1回复 待解决
HarmonyOS TextInput意外获焦
439浏览 • 1回复 待解决
HarmonyOS TextInput密码类型
60浏览 • 1回复 待解决
HarmonyOS TextInput的使用
384浏览 • 1回复 待解决
HarmonyOS TextInput如何clearFocus
389浏览 • 1回复 待解决
HarmonyOS TextInput如何开启禁止输入
45浏览 • 1回复 待解决