角度正则表达式错误

Posted

技术标签:

【中文标题】角度正则表达式错误【英文标题】: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)/;

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

【问题讨论】:

【参考方案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*\.\d2$/

说明:

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

【讨论】:

以上是关于角度正则表达式错误的主要内容,如果未能解决你的问题,请参考以下文章

角度的复杂正则表达式

html 角度电子邮件验证正则表达式模式

对于正则表达式的理解

正则表达式

正则表达式高阶技巧之环视(使用python实现)

刨根究底正则表达式之二——正则表达式基础