HarmonyOS 鸿蒙Next TextInput 如何密码模式与文本模式切换,文本模式如何限制不允许输入中文,或者是用密码模式如何将密码icon自定义到左侧

发布于 1周前 作者 phonegap100 来自 鸿蒙OS

HarmonyOS 鸿蒙Next TextInput 如何密码模式与文本模式切换,文本模式如何限制不允许输入中文,或者是用密码模式如何将密码icon自定义到左侧

TextInput({ text: this.user_password, placeholder: ‘请输入新密码’, })
.height(screenUtils.dp2px(40))
.width(screenUtils.dp2px(210))
.backgroundColor($r(‘app.color.background’))
.placeholderColor($r(‘app.color.color_nine’))
.showPasswordIcon(false)
.maxLength(20)

.type(this.isShowMingwen ? InputType.Normal : InputType.Password)
.onChange(value => {

})

3 回复
@Component  
struct PasswordInput {  
  @State user_password: string = ''  
  @State isShowMingwen: boolean = false  
  @State passwordVisible: boolean = false  

  // 正则过滤:只允许英文、数字和特殊字符  
  private passwordRegex = /^[a-zA-Z0-9!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]*$/  

  build() {  
    Row() {  
      TextInput({   
        text: this.user_password,   
        placeholder: '请输入新密码',   
      })  
      .height(screenUtils.dp2px(40))  
      .width(screenUtils.dp2px(210))  
      .backgroundColor($r('app.color.background'))  
      .placeholderColor($r('app.color.color_nine'))  
      .showPasswordIcon(false)  
      .maxLength(20)  
      .type(this.isShowMingwen ? InputType.Normal : InputType.Password)  
      .onChange(value => {  
        // 过滤中文输入  
        if (this.isShowMingwen) {  
          // 使用正则过滤中文  
          const filteredValue = value.replace(/[\u4e00-\u9fa5]/g, '')  
          if (filteredValue !== value) {  
            this.user_password = filteredValue  
          }  
        }  
        this.user_password = value  
      })  

      // 自定义密码可见性切换按钮  
      Image(this.passwordVisible ? $r('app.media.icon_password_visible') : $r('app.media.icon_password_invisible'))  
        .width(screenUtils.dp2px(20))  
        .height(screenUtils.dp2px(20))  
        .margin({ left: screenUtils.dp2px(10) })  
        .onClick(() => {  
          this.passwordVisible = !this.passwordVisible  
          this.isShowMingwen = this.passwordVisible  
        })  
    }  
    .alignItems(VerticalAlign.Center)  
  }  
}  

@Component  
struct PasswordInputAdvanced {  
  @State user_password: string = ''  
  @State isShowMingwen: boolean = false  
  @State passwordVisible: boolean = false  

  // 密码强度校验  
  private checkPasswordStrength(password: string): boolean {  
    // 至少8位,包含大小写字母、数字和特殊字符  
    const strongRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]).{8,}$/  
    return strongRegex.test(password)  
  }  

  build() {  
    Column() {  
      Row() {  
        TextInput({   
          text: this.user_password,   
          placeholder: '请输入新密码',   
        })  
        .height(screenUtils.dp2px(40))  
        .width(screenUtils.dp2px(210))  
        .backgroundColor($r('app.color.background'))  
        .placeholderColor($r('app.color.color_nine'))  
        .showPasswordIcon(false)  
        .maxLength(20)  
        .type(this.isShowMingwen ? InputType.Normal : InputType.Password)  
        .onChange(value => {  
          // 过滤中文输入  
          if (this.isShowMingwen) {  
            const filteredValue = value.replace(/[\u4e00-\u9fa5]/g, '')  
            if (filteredValue !== value) {  
              this.user_password = filteredValue  
            }  
          }  
          this.user_password = value  
        })  

        // 自定义密码可见性切换按钮  
        Image(this.passwordVisible ? $r('app.media.icon_password_visible') : $r('app.media.icon_password_invisible'))  
          .width(screenUtils.dp2px(20))  
          .height(screenUtils.dp2px(20))  
          .margin({ left: screenUtils.dp2px(10) })  
          .onClick(() => {  
            this.passwordVisible = !this.passwordVisible  
            this.isShowMingwen = this.passwordVisible  
          })  
      }  
      .alignItems(VerticalAlign.Center)  

      // 密码强度提示  
      if (this.user_password.length > 0) {  
        Text(this.checkPasswordStrength(this.user_password) ? '密码强度:强' : '密码强度:弱')  
          .fontSize(screenUtils.fp2px(12))  
          .color(this.checkPasswordStrength(this.user_password) ? Color.Green : Color.Red)  
      }  
    }  
  }  
}
HarmonyOS中提供了inputFilter属性,该属性可以用来设置输入过滤规则,从而限制或允许某些字符的输入,下方的demo不允许输入中文:
[@Entry](/user/Entry)
[@Component](/user/Component)
struct Index {
    controller: TextInputController = new TextInputController();
    build() {
        Column() {
            TextInput({
                placeholder: '请输入',
                text: '',
                controller: this.controller
            })
            .inputFilter('[^\u4e00-\u9fa5]', (val) => {
                console.error('TextInputExample : ' + val);
                return 0;
            })
        }
    }
}<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

针对HarmonyOS 鸿蒙Next TextInput组件的问题,以下是专业解答:

  1. 密码模式与文本模式切换

    TextInput组件提供了type属性来设置输入模式。可以通过改变type属性的值来实现密码模式(Password)与文本模式(Normal)之间的切换。例如,初始化为密码模式后,可以通过逻辑控制改变type属性为Normal来切换到文本模式。

  2. 文本模式限制不允许输入中文

    在文本模式下,可以通过配置输入法管理器或设置TextInput的inputFilter属性来限制输入字符。但需要注意的是,鸿蒙系统本身应支持中文输入,限制输入中文主要通过inputFilter属性实现,如使用正则表达式只允许输入英文字符。

  3. 密码模式自定义密码icon到左侧

    这通常涉及对TextInput组件的自定义渲染或布局调整。可能需要通过组合其他UI组件(如Image)和TextInput来实现,并将Image组件放置在TextInput的左侧来模拟密码图标。同时,需确保布局文件正确配置以实现预期效果。

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

回到顶部