鸿运应用开发学习-发现了一个TextInput组件中使用正则表达式后出现的BUG

一、起因

最近我正在学习鸿蒙应用开发,准备把之前在安卓系统上开发的一个小应用,使用ArkTs语言,再写一遍,做成原生鸿蒙应用。我的应用需要对液体的体积数据进行换算,对输入的体积和对应的温度参数根据相关的计算公式进行换算,得到该液体在20℃下的标准体积,然后在用标准体积做后续的数据处理。该应用需要用户输入体积和温度,这就要求用户只能输入0-9的数字以及符号和小数点,且要符合数字的要求。

二、发现InputType.Number模式不支持小数点

之前我在安卓系统上进行应用开发时,输入组件EditText可以通过设置inputType="numberSigned|numberDecimal"达到目的。但在鸿蒙应用的开发过程中,发现鸿蒙的输入组件TextInput其属下type只提供了Normal、Password、Email、Number、PhoneNumber五个枚举值,没有与安卓的numberSigned、numberDecimal功能相对应的枚举值。我使用InputType.Number进行测试,确认只能输入0-9的数字,无法输入其它符号。

三、反馈问题后华为工程师建议使用正则表达式

 于是我于1月5日在华为开发者联盟上向客户提交了问题,希望华为官方人员能提供帮助。

隔了几个小时,华为官方工程师给予了答复,确认鸿蒙的InputType不支持可以输入数字及负号和小数点的方式。建议我使用正则表达式来解决问题。 

四、使用正则表达式也不能解决问题

于是我又恶补了一下正则表达式的知识,按照所学的知识对输入组件TextInput做了过滤,并且type属性要选择InputType.Normal。

.inputFilter('(^[-]?[0-9]{1,2}[.]{1}[0-9]{0,1}$)|(^[-]?[0-9]{1,2}$)', (e) => { // 排除字母汉字和部分标点符号还有负号
    console.log('不合法字符:' + JSON.stringify(e))
  })

再次进行测试结果发现,仍然不能输入负号和小数点。

我怕自己设置的正则表达式有问题,有在python上进行了测试,确认表达式没错。

之后,我尝试了简化正则表达式做进一步的检测,结果还是不能符合要求,比如使用

'^(-?[0-9.]+)$'的正则表达式,可以输入小数点了,但不能输入负号,而且还存在输入的数据不符合数字要求的情况。

五、可能是鸿蒙系统的一个小BUG

我再次将问题提交给华为,这次连客户工程师也没辙了,回复我说,“已经将问题上升至相关部门,会尽快给您答复,请耐心等待。”

今天已经1月11日了,距离我第二次提问已经过去了7天,到写这个博客时,我还没有得到答复,估计这可能真是一个BUG,华为的工程师正在研究中吧。

六、当前暂时的解决办法

但我的应用还是要继续开发,我尝试着将正则表达式改成'[-1234567890.]' 后再次测试,可以输入数字、符合和小数点,但是.... 输入的字符顺序得不到限制,可能出现非数字形式的字符串,比如 -5-5-  12..5  .-512. 什么的。总之,仍然与我的需求有距离,还需要写大量的代码对输入的字符串进行判定,比较麻烦。并且由于type属性是选择的InputType.Normal,那么点击TextInput组件后,弹出的软键盘就不是数字键盘了,还得切换一下。这点上安卓还是方便得多,只需要一行代码就可以搞定。希望华为的工程师能解决这个问题。这对需要输入带符号和小数点数字的情况会很有帮助。

相关推荐

  1. 表达式元字符使用

    2024-01-16 14:12:04       21 阅读
  2. 鸿蒙OS应用开发表达式检查

    2024-01-16 14:12:04       36 阅读
  3. 表达式之pythonre模块使用以及一些习题

    2024-01-16 14:12:04       14 阅读
  4. 表达式在前端使用

    2024-01-16 14:12:04       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-16 14:12:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-16 14:12:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-16 14:12:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-16 14:12:04       20 阅读

热门阅读

  1. Redis面试题16

    2024-01-16 14:12:04       29 阅读
  2. 行为型设计模式—状态模式

    2024-01-16 14:12:04       34 阅读
  3. 分辨率的定义

    2024-01-16 14:12:04       36 阅读
  4. JUC-线程中断机制和LockSupport

    2024-01-16 14:12:04       36 阅读
  5. 解读vue配置文件(vue.config.js)

    2024-01-16 14:12:04       38 阅读
  6. 关于js学习-初体验

    2024-01-16 14:12:04       38 阅读