簡體   English   中英

小數位的正則小數,小數點后的8位數

[英]Regex for small decimal with 8 digits after decimal

我在使用十進制正則表達式時遇到問題需要允許正數或負數以及最多8位小數。

這就是我所擁有的。

^-?(?:(?:0|[1-9][0-9]*)(?:\.[0-9]{1,9})?|\.[0-9]{1,9})$

在大多數情況下,這是有效的,但它不驗證.00000001 ,我無法弄清楚為什么。 它似乎不適用於任何小數,我有超過6個零行。

 export class AmountValidateDirective implements Validator { validate(c: FormControl): any { let amount = c.value; const isValid = /^-?(?:(?:0|[1-9][0-9]*)(?:\\.[0-9]{1,9})?|\\.[0-9]{1,9})$/.test(amount); const message = { 'amountValidate': { 'message': 'Must be Decimal with less than 8 digits' } }; return isValid ? null : message; } } 

試試這個正則表達式:

^[+-]?\d*\.\d{1,8}$

單擊“演示”

說明:

  • ^ - 斷言該行的開頭
  • [+-]? - 可選擇匹配+-
  • \\d* - 匹配數字的0+次出現。 這表示小數部分之前的數字。
  • \\. - 匹配小數點.
  • \\d{1,8} - 匹配最少1位數,最多8位數
  • $ - 斷言該行的結尾

首先,您當前的正則表達式最多可接受9位小數。 我已將其調整為在點后最多8位數。

^-?(?:(?:0|[1-9][0-9]*)(?:.[0-9]{1,8})?|.[0-9]{1,8})$
                                   ^             ^
                                   ^             ^

我在這里測試過,你可以看到匹配列表: https//regex101.com/r/SQYgq9/1/

1
1234
1234.1234
123456.123456
1234567.1234657
12345678.12345678
12345678.1243546788 <NOT MATCHED
.91
0.12
.00001
.000001
.00000001
.000000001 <NOT MATCHED
.000000000 <NOT MATCHED
.0000000001 <NOT MATCHED
-1
-1234
-1234.1234
-123456.123456
-1234567.1234657
-12345678.12345678
-12345678.1243546788 <NOT MATCHED
-.91
-0.12
-.00001
-.000001
-.00000001
-.000000001 <NOT MATCHED
-.0000000001 <NOT MATCHED

如果您仍然有輸入驗證問題,您可能還有其他問題,例如輸入未修剪...例如,從正則表達式的角度看它很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM