HarmonyOS TextInput问题?

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

阅读 448
1 个回答

如果有需要可自行进行限制输入上限,这边提供一个可用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%")
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进