2011-07-06 56 views

回答

0

如何:

var x = '76', // (i.value) 
    testx = Number(x.match(/\d+/)[0]); 
console.log(testx>=0 && testx<=100); 

在功能應用:

function ValidateText(i) { 
var val = i.value; 
if (val.length>0) { 
    var test = Number(val.match(/\d+/)[0]); 
    return test >=0 && test <= 100; 
} 
return false; 
} 
2

試試這個

^(?:\d{1,2}(?:\.\d{1,2})?|100(?:\.0?0)?)$ 

看到它here on Regexr

(?:)是非捕獲組,這意味着來自該組的匹配不存儲到變量中。

\d{1,2}比賽1或2個位數

(?:\.\d{1,2})?這是可選的,一個接着被1個或兩個數字

100(?:\.0?0)?)匹配100隨後任選被1或2 0

.^匹配字符串的開頭

$字符串

需要這兩個錨的結束相匹配,否則它也將匹配,如果有東西之前或之後的有效數字。

更新: 我不知道,但如果你希望禁止前導零和數字沒有小數部分兩位數,那就試試這個:

^(?!0\d)(?:\d{1,2}(?:\.\d{2})|100\.00)$ 

我刪除了選裝件,所以它需要在它後面有一個點和兩個數字。

(?!0\d)是一個負向前視,確保數字不以0開頭,並且直接跟隨後面的數字。

+0

我.value = i.value.match(^(?:\ d {1,2}(?:\。\ d {1,2})?| 100(?:\。0?0)?)$);我嘗試這種方式,但它仍然允許0-9.0-9。 – z0mbie

+0

@ z0mbie,你想要禁止什麼?點後的前0或單個數字,或者你不喜歡什麼? – stema

+0

,領先的0是沒有問題的。我只想在0到100之間。在此範圍內,用戶也可以鍵入浮點模式。謝謝你的幫助。 – z0mbie

0

使用此:

function ValidateText(i) 
{ 
    if(i.value.length>0) 
    { 
     i.value = i.value.match(/[1?\d{1,2}\.\d\d]/)[0]; 
    } 
} 

,而不是替換所有不在(0.00 - 100.00)(因爲在我看來,你正在嘗試做的),我匹配所允許的字符串和替換原來的變量內容只有匹配的字符串。

請記住,如果您只有1場比賽,這將起作用。如果你有更多,你必須欺騙一下表達式並決定如何連接結果數組。

+0

我只能輸入「1」。 – z0mbie

0

使用這個表達式:^(?:100(?:\.0{1,2})?|[0-9]{1,2}(?:\.[0-9]{1,2})?)$

0

我真的不認爲這主要是一個正則表達式的問題。我可能會寫這篇文章,特別是如果你想要信息的錯誤消息出它:

HTML:

<input id="percentValue" type="text" size="20"> 
<input type="button" value="Check" onclick="checkPercent()"> 

的Javascript:

function checkPercent() { 
    var o = document.getElementById("percentValue"); 
    var val = o.value; 
    if (val.length == 0) { 
     alert("Empty value"); 
     return; 
    } 
    var index = val.search(/[^0-9\.]/); 
    if (index != -1) { 
     o.selectionStart = o.selectionEnd = index; 
     alert("Invalid characters"); 
     return; 
    } 
    if (val.match(/\./g).length > 1) 
    { 
     alert("Number must be of the form n.n"); 
     return; 
    } 
    var floatVal = parseFloat(val); 
    if (floatVal < 0 || floatVal > 100) 
    { 
     alert("Value must be between 0.00 and 100.00"); 
     return; 
    } 
    alert("Valid value of: " + floatVal.toFixed(2)); 
} 

的jsfiddle這裏:http://jsfiddle.net/jfriend00/rDbAp/

+0

這仍然允許「1.2.3.4」 – 6502

+0

良好的捕獲。我糾正了這一點。 – jfriend00

7

這種表達應該只允許你要求的東西

/^(\d\d?(\.\d\d?)?|100(\.00?)?)$/ 

含義是

^   start of string 
(   start of sub-expression ("or" between two possibilities) 
\d\d?  one or two digits 
(\.\d\d?)? optionally followed with a dot and one or two digits 
|   or 
100   the string "100" 
(\.00?)?  optionally followed by a dot and one or two zeros 
)   end of sub-expression 
$   end of string 
+1

+1用於評論正則表達式 – jfriend00

7

現在,這是一些流行的問題!

這應該這樣做:

function validate(s) { 
    return s.match(/^(100(\.0{1,2})?|[1-9]?\d(\.\d{1,2})?)$/) != null; 
} 

var test = [ 
    '3.0', 
    '5', 
    '99.99', 
    '100', 
    '100.00', 
    '100.01', 
    '101', 
    '0.3', 
    '.5', 
    '0.567', 
]; 

for (i=0; i<test.length; ++i) { 
    WScript.StdOut.WriteLine(test[i] + ' => ' + validate(test[i])); 
} 

輸出:

3.0 => true 
5 => true 
99.99 => true 
100 => true 
100.00 => true 
100.01 => false 
101 => false 
0.3 => true 
.5 => false 
0.567 => false 

編輯:正則表達式可以縮短一點,而不改變其含義,學分6502

/^(100(\.00?)?|[1-9]?\d(\.\d\d?)?)$/ 
+1

如果可能,我會使用非捕獲組「(?:...)」。 – Qtax

+0

@Qtax,有什麼特別的原因? – SnakE

+0

無需浪費捕獲組/後退參考,不需要它們,請參閱http://stackoverflow.com/questions/5293986/why-not-create-a-backreference – Qtax