2017-08-23 21 views
1

我用這個正則表達式我場開始:正則表達式的數量可與0

/^([1-9]([0-9]){0,3}?)((\.|\,)\d{1,2})?$/; 

我想要做的是讓用戶輸入0作爲數的開始,但在這cas,他必須從0開始至少輸入第二位數字,並且第三和第四位數字應用相同的規則。

實施例:

  • 01 - >有效
  • 00 - >無效
  • 0 - >無效
  • 1 - >有效

總之,零值一定不能被允許。我如何使用Regex來做到這一點?或者如果我只是用javascript腳本來做它會更好嗎?

+0

也許'/^(?!0+(?:[.,]0+)?$)\d{1,3} (?:[。,] \ d {1,2})$ /'?請參閱https://regex101.com/r/Gm9JH7/1。請確認您想在小數點分隔符前僅匹配1至3位數字。 –

+0

感謝您的建議,但0匹配此正則表達式。你可以看看[這個鏈接](https://regex101.com/) – Anna

+0

Anna,不,請參閱https://regex101.com/r/Gm9JH7/1。它不匹配'0'。 '(?!0 +(?:[。,] 0 +)?$)'不會讓字符串等於'0','00000','000.00000','00000.0'等等 –

回答

1

如果你想只匹配在部分1至4位的小數分隔符之前的數字,併到小數點後2個位數(我推斷它從你使用正則表達式)不以00啓動(即需求來自您的口頭解釋),使用

/^(?!00)(?!0+(?:[.,]0+)?$)\d{1,~4}(?:[.,]\d{1,2})?$/ 

regex demo

詳細

  • ^ - 字符串的開始
  • (?!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); 
 
}

+0

注意我添加了一個'0001'測試用例,我猜應該會失敗。因此,我添加了一個'(!!00)'前瞻來確保以'00'開頭的數字將失敗。 –

+0

這不完全工作。 –

+0

@DucFilan然後你沒有點擊*運行代碼片段*。或者你還沒有理解這個問題。 –

1

嘗試合併JS和正則表達式:

if (parseInt(value) != 0 && value.test(/\d+([,.]\d{1,2})?/)) { 
    //valid 
} 
+0

謝謝!有一個解決方案只使用正則表達式:) – Anna