一、起因
最近我正在學(xué)習(xí)鴻蒙應(yīng)用開發(fā),準(zhǔn)備把之前在安卓系統(tǒng)上開發(fā)的一個(gè)小應(yīng)用,使用ArkTs語言,再寫一遍,做成原生鴻蒙應(yīng)用。我的應(yīng)用需要對液體的體積數(shù)據(jù)進(jìn)行換算,對輸入的體積和對應(yīng)的溫度參數(shù)根據(jù)相關(guān)的計(jì)算公式進(jìn)行換算,得到該液體在20℃下的標(biāo)準(zhǔn)體積,然后在用標(biāo)準(zhǔn)體積做后續(xù)的數(shù)據(jù)處理。該應(yīng)用需要用戶輸入體積和溫度,這就要求用戶只能輸入0-9的數(shù)字以及符號和小數(shù)點(diǎn),且要符合數(shù)字的要求。
二、發(fā)現(xiàn)InputType.Number模式不支持小數(shù)點(diǎn)
之前我在安卓系統(tǒng)上進(jìn)行應(yīng)用開發(fā)時(shí),輸入組件EditText可以通過設(shè)置inputType="numberSigned|numberDecimal"達(dá)到目的。但在鴻蒙應(yīng)用的開發(fā)過程中,發(fā)現(xiàn)鴻蒙的輸入組件TextInput其屬下type只提供了Normal、Password、Email、Number、PhoneNumber五個(gè)枚舉值,沒有與安卓的numberSigned、numberDecimal功能相對應(yīng)的枚舉值。我使用InputType.Number進(jìn)行測試,確認(rèn)只能輸入0-9的數(shù)字,無法輸入其它符號。
三、反饋問題后華為工程師建議使用正則表達(dá)式
?于是我于1月5日在華為開發(fā)者聯(lián)盟上向客戶提交了問題,希望華為官方人員能提供幫助。
隔了幾個(gè)小時(shí),華為官方工程師給予了答復(fù),確認(rèn)鴻蒙的InputType不支持可以輸入數(shù)字及負(fù)號和小數(shù)點(diǎn)的方式。建議我使用正則表達(dá)式來解決問題。?
四、使用正則表達(dá)式也不能解決問題
于是我又惡補(bǔ)了一下正則表達(dá)式的知識,按照所學(xué)的知識對輸入組件TextInput做了過濾,并且type屬性要選擇InputType.Normal。
.inputFilter('(^[-]?[0-9]{1,2}[.]{1}[0-9]{0,1}$)|(^[-]?[0-9]{1,2}$)', (e) => { // 排除字母漢字和部分標(biāo)點(diǎn)符號還有負(fù)號
console.log('不合法字符:' + JSON.stringify(e))
})
再次進(jìn)行測試結(jié)果發(fā)現(xiàn),仍然不能輸入負(fù)號和小數(shù)點(diǎn)。
我怕自己設(shè)置的正則表達(dá)式有問題,有在python上進(jìn)行了測試,確認(rèn)表達(dá)式?jīng)]錯(cuò)。
之后,我嘗試了簡化正則表達(dá)式做進(jìn)一步的檢測,結(jié)果還是不能符合要求,比如使用
'^(-?[0-9.]+)$'的正則表達(dá)式,可以輸入小數(shù)點(diǎn)了,但不能輸入負(fù)號,而且還存在輸入的數(shù)據(jù)不符合數(shù)字要求的情況。
五、可能是鴻蒙系統(tǒng)的一個(gè)小BUG
我再次將問題提交給華為,這次連客戶工程師也沒轍了,回復(fù)我說,“已經(jīng)將問題上升至相關(guān)部門,會(huì)盡快給您答復(fù),請耐心等待?!?/p>
今天已經(jīng)1月11日了,距離我第二次提問已經(jīng)過去了7天,到寫這個(gè)博客時(shí),我還沒有得到答復(fù),估計(jì)這可能真是一個(gè)BUG,華為的工程師正在研究中吧。
六、當(dāng)前暫時(shí)的解決辦法
但我的應(yīng)用還是要繼續(xù)開發(fā),我嘗試著將正則表達(dá)式改成'[-1234567890.]' 后再次測試,可以輸入數(shù)字、符合和小數(shù)點(diǎn),但是.... 輸入的字符順序得不到限制,可能出現(xiàn)非數(shù)字形式的字符串,比如 -5-5-? 12..5? .-512. 什么的??傊匀慌c我的需求有距離,還需要寫大量的代碼對輸入的字符串進(jìn)行判定,比較麻煩。并且由于type屬性是選擇的InputType.Normal,那么點(diǎn)擊TextInput組件后,彈出的軟鍵盤就不是數(shù)字鍵盤了,還得切換一下。這點(diǎn)上安卓還是方便得多,只需要一行代碼就可以搞定。希望華為的工程師能解決這個(gè)問題。這對需要輸入帶符號和小數(shù)點(diǎn)數(shù)字的情況會(huì)很有幫助。文章來源:http://www.zghlxwxcb.cn/news/detail-793876.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-793876.html
到了這里,關(guān)于鴻運(yùn)應(yīng)用開發(fā)學(xué)習(xí)-發(fā)現(xiàn)了一個(gè)TextInput組件中使用正則表達(dá)式后出現(xiàn)的BUG的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!