HarmonyOS 鸿蒙Next 如何解决TextInput设置为密码输入模式时无法输入部分特殊字符问题

发布于 1周前 作者 songsunli 最后一次编辑是 5天前 来自 鸿蒙OS

【问题现象】

设置TextInput.type为InputType.Password时,无法输入部分特殊字符,比如€ £ ¢ ¥。

【背景知识】

  • TextInput.type为InputType.Password时,支持输入数字、字母空格和特殊字符等ASCII码表范围内的字符。
  • 针对输入的内容,TextInput可以设置inputFilter属性,使用正则表达式设置输入过滤器,匹配表达式的可以输入,不匹配表达式的内容将被过滤。过滤器仅针对单个字符,不支持字符串匹配。

【定位思路】

TextInput的密码输入模式在默认情况下只支持ASCII****码表的字符,可以理解为:TextInput设置为密码输入模式情况下,默认自带inputFilter属性,非ASCII码表范围内的字符都会被过滤。因此如果要输入非ASCII码表的特殊字符,需要对inputFilter的正则表达式筛选规则进行修改。

由于一个TextInput只能适用一种过滤器,若对TextInput设置多个inputFilter属性,最后一个inputFilter过滤器的匹配规则会覆盖前面设置的过滤器规则

因此,可以通过对密码输入模式下的TextInput再设置inputFilter,覆盖其默认情况下的匹配规则,并根据业务需求设置有效的正则表达式,即可输入ASCII码表以外的特殊字符。

【解决方案】

下面将对比默认情况下和设置了不同正则表达式下,密码输入模式可输入的字符区别,其中2、3分别实现非空字符输入和全字符输入。

代码示例如下:

@Entry
@Component
struct TextInputFilter {
  specialChars: string = '~!@#%^*_= +?$&()|<>{}[].€£¢¥'
  fontColor: number = 0xAAAAAA

  build() {
    Column({space: 20}) {
      Text('TextInput中输入以下字符串(在=和+之间有空格):\n\n~!@#%^*_= +?$&()|<>{}[].€£¢¥')
        .fontSize('14fp')
        .fontColor(Color.Red)
      Column() {
        Text('1. 默认情况下的密码输入模式')
          .fontColor(this.fontColor)
          .padding({bottom: 5})
        /*
          默认情况下,密码输入模式可以正常显示空格和特殊字符串的部分字符~!@#%^*_= +?$&()|<>{}[].
         */
        TextInput({text: this.specialChars})
          .inputStyle()
      }
      Divider().height(20)
      Column() {
        Text('2. 密码输入模式可输入非空字符')
          .fontColor(this.fontColor)
          .padding({bottom: 5})
        /*
          正则表达式\\S+表示多个非空字符
          设置正则表达式\\S+后,密码输入模式支持非空字符的输入~!@#%^*_=+?$&()|<>{}[].€£¢¥
         */
        TextInput({text: this.specialChars})
          .inputStyle()
          .inputFilter('\\S+')
      }
      Divider().height(20)
      Column() {
        Text('3. 密码输入模式可输入全字符')
          .fontColor(this.fontColor)
          .padding({bottom: 5})
        /*
          正则表达式\\s+表示多个空格字符
          设置正则表达式\\S+|\\s+,密码输入模式支持全字符的输入~!@#%^*_= +?$&()|<>{}[].€£¢¥
         */
        TextInput({text: this.specialChars})
          .inputStyle()
          .inputFilter('\\S+|\\s+')
      }
    }.height('80%')
    .margin({top: 20, left: 10, right: 10})
  }
}

@Extend(TextInput) function inputStyle() {
  .type(InputType.Password)
  .showPassword(true)
}

效果如下:

点击放大

【总结】

TextInput的密码输入模式(InputType.Password)默认支持部分特殊字符,针对默认未支持的特殊字符,可以通过灵活应用inputFilter属性,使用不同的正则表达式实现特殊字符的输入。

1 回复

针对HarmonyOS 鸿蒙Next中TextInput设置为密码输入模式时无法输入部分特殊字符的问题,这通常是由于系统或应用的输入限制设置所导致的。

在HarmonyOS中,TextInput组件的inputFilter属性可以用于设置输入字符的校验规则。若想要允许特定特殊字符的输入,可以尝试调整inputFilter的配置,使用正则表达式来匹配允许输入的字符集。例如,若希望允许输入数字和某些特殊字符,可以如此设置正则表达式。

然而,若问题依然存在,可能是由于系统层面的安全策略或输入法兼容性问题所导致。此时,建议检查系统的输入法设置,确保输入法支持所需字符的输入,并尝试更新系统或输入法至最新版本。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部