【问题标题】:Angular regex error角度正则表达式错误
【发布时间】:2018-06-21 21:19:22
【问题描述】:

我正在 Angular 中创建一个表单,该表单要求 rate 字段仅采用小数点后 2 位的数字。我的 HTML 如下:

<input type="number" class="form-control"  (keypress)="_keyPress($event)" (ngModelChange)="Valuechange($event,salesorder,'Rate')"  [ngModelOptions]="{standalone: true}" name="customerCode" #customerCode="ngModel" [(ngModel)]="salesorder._dto.rate" [style]="{'text-align':'right'}" />

在每个按键事件中,我都会调用_keyPress() 方法,如下所示:

_keyPress(event: any) {
        const pattern = /[0-9\+\.\ ]/;
       let inputChar = String.fromCharCode(event.charCode);
        if (!pattern.test(inputChar)) {
            // invalid character, prevent input
            event.preventDefault();
        }
    }

上述正则表达式可以正常工作,但不会将数字限制为 2 位小数。我尝试了各种正则表达式,但无法实现对小数点后 2 位的限制。我以前做的最后一个正则表达式如下:

 const pattern = /[0-9]+(.[0-9]{0,2})/;

我对正则表达式一无所知。

【问题讨论】:

    标签: regex angular forms angular2-forms angular4-forms


    【解决方案1】:

    要将小数位限制为 2 位,您可以使用 {2}

    {0,2} 表示匹配零、一或两次。 [0-9]+(\.[0-9]{2})

    注意 这使用了一个不必要的捕获组(\.[0-9]{2}),可以写成\.[0-9]{2}

    您也可以使用锚点来匹配从开头的^ 到结尾的$

    ^[0-9]+(\.[0-9]{2})$

    ^[0-9]+\.[0-9]{2}$

    var pattern = /^[0-9]+(\.[0-9]{2})$/;
    var inputs = [
      "22.65",
      "22.6",
      "22.656"
    ];
    for (var i = 0; i< inputs.length; i++) {
        console.log(pattern.test(inputs[i]))
    }

    【讨论】:

      【解决方案2】:

      你可以试试下面的正则表达式:

      const pattern = /^[0-9]*\.[0-9]{2}$/
      

      或者您可以使用速记字符类 \d 而不是 [0-9] 即:

      const pattern = /^\d*\.\d{2}$/
      

      说明:

      • [0-9]{2}$\d{2}$ 将确保小数点后正好有 2 个数字。
      • 如果点之前必须至少有一个数字,您可以将* 替换为+

      【讨论】:

        猜你喜欢
        • 2019-04-30
        • 1970-01-01
        • 1970-01-01
        • 2016-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-19
        相关资源
        最近更新 更多