Angular--Zorro中InputNumber數字輸入框禁止輸入非法字符(英文,標點等)

組件來源地址:https://ng.ant.design/components/input-number/zh

我在項目中遇到的問題:使用nz-input-number組件,若用戶輸入非法字符,input框立馬變爲紅色,表示警告。我第一反應就是一旦監聽到用戶輸入了非法字符(除數字之外的),立馬給予警告,同時input框就是這樣實現的校驗,但是在實際操作的過程中就會發現,我們無法實時監聽用戶的輸入行爲。

使用過該組件的用戶會知道,即便該組件是數字框,但是依然可以輸入英文及其他除數字之外的字符,只是在失焦的時候,input中的值會變爲就近輸入過的整數值,這一點官網也有介紹。同時有一點,我想對該組件進行校驗的時候,並不能在用戶輸入的過程中做到實時監聽用戶的輸入。

 在解決過程中,想到用正則表達式限制用戶輸入除數字之外的其他字符。方法如下:

<nz-input-number
    formControlName="pwd_login_timeout"
    [nzMin]="0"
    [nzMax]="120"
    [nzStep]="1"
    id="timeout"
    [(ngModel)]="pwdLoginTimeout"
    (ngModelChange)="changeMethod()"
    (input)="onInput($event)"
></nz-input-number>
onInput($event) {
    // console.log($event)
    if (!$event) {
      return;
    }
    const target = $event.target;
    console.log(target)
    const regexp = /^(\d)+$/;
    target.value = target.value.replace(regexp, '');
    console.log(target.value)
  }

因爲在方法中,對用戶的輸入進行了校驗,並且校驗不成功就會替換爲空,因此可以做到禁止用戶輸入非法字符。但是這一點並不能真正解決我的需求。因此,還需要進行校驗,https://angular.cn/guide/form-validation即angular的表單驗證。當然這兩部分的結合可以實現。但是我在使用過程中,校驗會出現問題。

上述問題的第二種方法其實可以用指令的方式解決,但是我還沒有實踐,若真正實踐了之後,會將代碼附上。

其實我們最終的解決方案是將nz-input-number換成了input,因爲他可以做到實時監聽,代碼如下:

該方法就是上面圖片中調用的方法。

如上,即實現了我們想要的結果。

另外,在代碼編寫過程中,我想要封裝成一個統一的方法,這樣只需要根據校驗的字段去匹配相應的正則表達式即可。但是在獲取校驗字段時出問題。最終知道這些字段都在control中,是組件封裝好的。

上面的keyValue就是我們需要的字段。

https://blog.csdn.net/gosenkle/article/details/80110853

發佈了106 篇原創文章 · 獲贊 24 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章