使用正則表達式可以允許匹配具有最大數量的字符,並將其劃分爲不同的字符類?正則表達式:限制整個匹配和字符類別
我需要匹配最多4位數的總數,有或沒有小數位數。因此,這些應該都是一致的正則表達式:
123
1234
12.34
123.4
但這些不應該:
12345
12.345
在概念上,這樣的事情應該工作,只是它不:
([0-9]{0,4}([.]?[0-9]{0,4})){0,4}
使用正則表達式可以允許匹配具有最大數量的字符,並將其劃分爲不同的字符類?正則表達式:限制整個匹配和字符類別
我需要匹配最多4位數的總數,有或沒有小數位數。因此,這些應該都是一致的正則表達式:
123
1234
12.34
123.4
但這些不應該:
12345
12.345
在概念上,這樣的事情應該工作,只是它不:
([0-9]{0,4}([.]?[0-9]{0,4})){0,4}
使用向前看斷言有最多1點:
^(?!([^.]\.){2})(?!\d{5})[\d.]{3,5}$
(?!([^.]\.){2})
手段「放眼望去的任何地方,不會有2個點(?!\d{5})
的意思是‘展望未來,有沒有5個位數直’[\d.]{3,5}
指‘的數字和點3-5’請參閱live demo。
要限制十進制數字來最大2,加(?!.*\.\\d{3,}$)
這是一種消極的前瞻了「點,然後3+位數底」,即:
^(?!([^.]\.){2})(?!\d{5})(?!.*\.\\d{3,}$)[\d.]{3,5}$
以下正則表達式應該這樣做......
\b(?:\d{1,3}\.\d{1,2}|\d{1}\.\d{1,3}|(?<!\.)\d{1,4}(?!\.))\b
如果您正則表達式的味道接受它,你可以使用前瞻,如:
編輯:允許最多2位小數
^(?:\d{1,4}|(?=.{1,5}$)\d+\.\d{1,2})$
說明:
^ : begining of string
(?: : start non capture group
\d{1,4} : 1 up to 4 digit
| : OR
(?= : lookahead
.{1,5}$ : 1 up to 5 character (it could be .{3,5} if at least 1 digit is mandatory on each side of the dot)
) : end lookahead
\d+ : 1 or more digits, integer part
\. : dot
\d{1,2} : 1 or 2 digits, decimal part
) : end group
$ : end of string
var test = [
123,
1234,
12.34,
123.4,
12345,
12.345,
1.234
];
console.log(test.map(function (a) {
return a+' :'+/^(?:\d{1,4}|(?=.{1,5}$)\d+\.\d{1,2})$/.test(a);
}));
@MichielMeulendijk:請注意,接受的答案不匹配小於3位數的數字,即。 '1'或'45' – Toto
如果整個輸入是數字,或者是更大輸入內的數字,您希望匹配嗎? – Bohemian
'12.'和'.12'是否有效? – Toto