2017-07-26 40 views
2

我想找到一個正則表達式代碼來禁用用戶輸入的負數。 我玩代碼升技試圖找到正確的,但沒有太大的成功。淘汰賽Js正則表達式無負數

我當前的代碼是:

Price: ko.observable().extend({ 
     required: true, 
     pattern: '^[0-9].$' 
    }) 
+0

是那個時期應該是一個小數?任何數字都可以跟隨小數嗎? – 2017-07-26 02:05:17

+0

我不確定您的期限是什麼意思。它可以是小數,只要其數字1和以上 – harpreet

+0

您可以使用這個有用的正則表達式測試器:https://regex101.com/ –

回答

0

在這種情況下,爲什麼您需要允許用戶在輸入字段中輸入負號,並根據負數驗證輸入?

相反,您可以防止用戶輸入負數/字符串。

這使用JavaScript,但您不必編寫自己的驗證例程。相反,只需檢查validity.valid屬性。當且僅當輸入落在範圍內時,這纔是真實的。

解決方案1:

<html> 
 
<body> 
 
<form action="#"> 
 
    <input type="number" name="test" min=0 oninput="validity.valid||(value='');"> 
 
</form> 
 
</body> 
 
</html>

解決方案2:

以下解決方案支持驗證多個輸入。

// Select your input element. 
 
var numInput = document.querySelector('input'); 
 

 
// Listen for input event on numInput. 
 
numInput.addEventListener('input', function(){ 
 
    // Let's match only digits. 
 
    var num = this.value.match(/^\d+$/); 
 
    if (num === null) { 
 
     // If we have no match, value will be empty. 
 
     this.value = ""; 
 
    } 
 
}, false)
<input type="number" min="0" />

解決方案3:

我沒有測試過下面的解決方案,但是這可能會有所幫助...

'/^\d+$/''^\d+$'模式可能會幫助您與當前的方法。

Price: ko.observable().extend({ 
     required: true, 
     pattern: '/^\d+$/' 
    }) 

Original Solution and Reference here ..

希望這有助於...

0

您可以使用數字組\ d

pattern: '^\d+\.?$' 

這符合以下幾點:

  • 數必須開始之初該行
  • 必須包含一個或多個數字
  • 可以有字符「。」。 0或1次
  • 的數量必須在線路

這裏的結束端匹配的一些例子: 「34」, 「5」, 「45687654」, 「1」,「198289。 「

我注意到你說你想避免負數,你的解決方案是擠壓數字到行的開始和結束。您也可以使用負回顧後,檢查該號碼沒有一個負號,如用

pattern: '(?<!-)\b\d+\.?' 

我還添加了一個字邊界檢查(\b)從而不會試圖以匹配23 -123