角度正则表达式错误
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 个数字。
如果点之前必须至少有一个数字,您可以将*
替换为+
。
【讨论】:
以上是关于角度正则表达式错误的主要内容,如果未能解决你的问题,请参考以下文章