HarmonyOS 鸿蒙Next TextInput 如何密码模式与文本模式切换,文本模式如何限制不允许输入中文,或者是用密码模式如何将密码icon自定义到左侧
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 => {
})
.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组件的问题,以下是专业解答:
-
密码模式与文本模式切换:
TextInput组件提供了type属性来设置输入模式。可以通过改变type属性的值来实现密码模式(Password)与文本模式(Normal)之间的切换。例如,初始化为密码模式后,可以通过逻辑控制改变type属性为Normal来切换到文本模式。
-
文本模式限制不允许输入中文:
在文本模式下,可以通过配置输入法管理器或设置TextInput的inputFilter属性来限制输入字符。但需要注意的是,鸿蒙系统本身应支持中文输入,限制输入中文主要通过inputFilter属性实现,如使用正则表达式只允许输入英文字符。
-
密码模式自定义密码icon到左侧
这通常涉及对TextInput组件的自定义渲染或布局调整。可能需要通过组合其他UI组件(如Image)和TextInput来实现,并将Image组件放置在TextInput的左侧来模拟密码图标。同时,需确保布局文件正确配置以实现预期效果。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html