HarmonyOS 鸿蒙Next中关于TextInput组件的inputFilter正则过滤的用法请教

HarmonyOS 鸿蒙Next中关于TextInput组件的inputFilter正则过滤的用法请教

TextInput()
    .type(InputType.NUMBER_DECIMAL)
    .placeholderColor(Color.Gray)
    .maxLength(6) // 限制最大输入字符为6
    .fontSize(19)
    .inputFilter('^\d{1,3}(\.\d{1,2})?$')//最大支持3位整数2位小数, 为什么没有效果
7 回复

开发者您好,关于您咨询的问题,您可参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-search#inputfilter12,inputFilter仅支持单个字符匹配,不支持字符串匹配。可通过onChange、onWillChange等事件处理文本内容。

更多关于HarmonyOS 鸿蒙Next中关于TextInput组件的inputFilter正则过滤的用法请教的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


你可以用onwillchang这个回调用正则表达式来限制输入

你好。

  • inputFilter仅支持单个字符匹配。文档明确指出inputFilter仅支持单个字符匹配,不支持字符串匹配。^\d{1,3}(\.\d{1,2})?$是针对整体输入字符串的匹配规则,在输入过程中,若输入的是多个字符,可能不会按预期进行过滤。例如,输入 “123.45” 时,inputFilter可能逐个字符处理,而非对整个字符串进行匹配判断。

请参考:

@Entry
@Component
struct Index {
  private inputValue: string = ''

  build() {
    Column({ space: 50 }) {
      TextInput({ placeholder: '请输入数字' })
        .placeholderColor(Color.Gray)
        .type(InputType.NUMBER_DECIMAL)
        .maxLength(6)
        .fontSize(19)
        .onChange((value: string) => {
          // 定义正则表达式,用于匹配最大 3 位整数和 2 位小数
          const regex = /^\d{1,3}(\.\d{1,2})?$/
          if (regex.test(value)) {
            // 如果输入值符合正则表达式,更新输入值
            this.inputValue = value
          } else {
            // 如果不符合,截取之前符合的部分
            for (let i = value.length; i > 0; i--) {
              const subValue = value.slice(0, i)
              if (regex.test(subValue)) {
                this.inputValue = subValue
                break
              }
            }
          }
        })
      Text(`输入的值: ${this.inputValue}`)
    }
    .width('100%')
  }
}

你好,我如果想用InputFiller属性来过滤,实现不了这个需求吗,还是因为我写的正则不对,

在HarmonyOS鸿蒙Next中,TextInput组件的inputFilter属性用于过滤用户输入的内容。你可以通过正则表达式来定义过滤规则。例如,若只允许输入数字,可以这样设置:

TextInput({ placeholder: '请输入数字' })
  .inputFilter(/[0-9]/)

inputFilter接受一个正则表达式,只有匹配该正则的字符才会被允许输入。注意,正则表达式应匹配单个字符,而非整个字符串。

回到顶部