[英]Regex: integer OR decimal OR fraction
在 JavaScript 中,是否可以使用單個正則表達式來驗證某個輸入是整數還是小數(使用點或逗號作為分隔符)或分數(分子或分母中不允許有零)?
有效輸入示例:
1
2
1.5
2,5
111.422
0,5
1/2
3/4
等等。
無效輸入
00,5
00.5
0/1
1/0
等等。
到目前為止,我將它用於小數部分:
^(0|[1-9]\d*)([\.,]\d*)?$
但我無法將它與分數部分結合起來。 我不知道在不使用一些額外的流量控制的情況下是否可以只使用一個正則表達式。
謝謝!
您可以添加一個交替,其中分子或分母都以數字 1-9 開頭
如果例如3.
也無效,您可以在這部分重復數字 1+ 次(?:[.,]\\d+)?
請注意,您不必轉義字符類中的點。
^(?:(?:0|[1-9]\d*)(?:[.,]\d+)?|[1-9]\d*\/[1-9]\d*)$
let pattern = /^(?:(?:0|[1-9]\\d*)(?:[.,]\\d+)?|[1-9]\\d*\\/[1-9]\\d*)$/; ["1", "2", "1.5", "2,5", "111.422", "0,5", "1/2", "3/4", "00,5", "00.5", "0/1", "1/0" ].forEach(s => console.log(`${s} --> ${pattern.test(s)}`))
我認為這是穩健的:
/^(0?([1-9][0-9]*)?([\.,])?0?([1-9][0-9]*)?|[1-9]+\/[1-9]+)$/
例子:
let foo = [
'1',
'2',
'1.5',
'2,5',
'111.422',
'0,5',
'1/2',
'3/4',
'00,5',
'00.5',
'0/1',
'1/0'
];
foo.forEach(val => {
console.log(val, /^(0?([1-9][0-9]*)?([\.,])?0?([1-9][0-9]*)?|[1-9]+\/[1-9]+)$/.test(val));
});
給
1 true
2 true
1.5 true
2,5 true
111.422 true
0,5 true
1/2 true
3/4 true
00,5 false
00.5 false
0/1 false
1/0 false
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.