我用這個正則表達式我場開始:正則表達式的數量可與0
/^([1-9]([0-9]){0,3}?)((\.|\,)\d{1,2})?$/;
我想要做的是讓用戶輸入0作爲數的開始,但在這cas,他必須從0開始至少輸入第二位數字,並且第三和第四位數字應用相同的規則。
實施例:
- 01 - >有效
- 00 - >無效
- 0 - >無效
- 1 - >有效
總之,零值一定不能被允許。我如何使用Regex來做到這一點?或者如果我只是用javascript腳本來做它會更好嗎?
我用這個正則表達式我場開始:正則表達式的數量可與0
/^([1-9]([0-9]){0,3}?)((\.|\,)\d{1,2})?$/;
我想要做的是讓用戶輸入0作爲數的開始,但在這cas,他必須從0開始至少輸入第二位數字,並且第三和第四位數字應用相同的規則。
實施例:
總之,零值一定不能被允許。我如何使用Regex來做到這一點?或者如果我只是用javascript腳本來做它會更好嗎?
如果你想只匹配在部分1至4位的小數分隔符之前的數字,併到小數點後2個位數(我推斷它從你使用正則表達式)和不以00
啓動(即需求來自您的口頭解釋),使用
/^(?!00)(?!0+(?:[.,]0+)?$)\d{1,~4}(?:[.,]\d{1,2})?$/
詳細
^
- 字符串的開始(?!00)
- 沒有兩個0
s的字符串(?!0+(?:[.,]0+)?$)
的開始 - 如果有失敗的比賽一負向前查找一個或更多0
s,接着是可選序列.
或,
,後跟一個或多個零直到字符串末尾\d{1,4}
- 任意1〜4個數字(?:[.,]\d{1,2})?
- 1或0的出現
[.,]
- 一個.
或,
\d{1,2}
- 任何1或2個數字$
- 的端串。JS演示:
var ss = ['1','1.1','01','01.3','023.45','0','00','0.0','0.00','0001'];
var rx = /^(?!00)(?!0+(?:[.,]0+)?$)\d{1,4}(?:[.,]\d{1,2})?$/;
for (var s of ss) {
var result = rx.test(s);
console.log(s, "=>", result);
}
注意我添加了一個'0001'測試用例,我猜應該會失敗。因此,我添加了一個'(!!00)'前瞻來確保以'00'開頭的數字將失敗。 –
這不完全工作。 –
@DucFilan然後你沒有點擊*運行代碼片段*。或者你還沒有理解這個問題。 –
嘗試合併JS和正則表達式:
if (parseInt(value) != 0 && value.test(/\d+([,.]\d{1,2})?/)) {
//valid
}
謝謝!有一個解決方案只使用正則表達式:) – Anna
也許'/^(?!0+(?:[.,]0+)?$)\d{1,3} (?:[。,] \ d {1,2})$ /'?請參閱https://regex101.com/r/Gm9JH7/1。請確認您想在小數點分隔符前僅匹配1至3位數字。 –
感謝您的建議,但0匹配此正則表達式。你可以看看[這個鏈接](https://regex101.com/) – Anna
Anna,不,請參閱https://regex101.com/r/Gm9JH7/1。它不匹配'0'。 '(?!0 +(?:[。,] 0 +)?$)'不會讓字符串等於'0','00000','000.00000','00000.0'等等 –