javascript正则表达式,介于0到100之间的百分比

时间:2011-07-06 07:37:18

标签: javascript .net regex asp.net-2.0

  

可能重复:
  Javascript percentage validation

我想仅允许0.00到100.00。

function ValidateText(i)
    {

        if(i.value.length>0)
        {
         i.value = i.value.replace(/[^\d.d]+/g, '');

        }
    }
<asp:textbox id="txtrate" runat="server" Width="200px"  onkeyup= "javascript:ValidateText(this)"></asp:textbox>

允许0-9.0-9。请帮帮我。谢谢

7 个答案:

答案 0 :(得分:9)

现在这是一个很受欢迎的问题!

这应该做:

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 :(得分:8)

此表达式应仅允许您要求的内容

/^(\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

答案 2 :(得分:2)

试试这个

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

here on Regexr

(?:)是非捕获组,这意味着此组中的匹配不会存储到变量中。

\d{1,2}匹配1或2位数

(?:\.\d{1,2})?这是可选的,.后跟1或2位数

100(?:\.0?0)?)匹配100,后跟1或2 0

^匹配字符串的开头

$匹配字符串

的结尾

需要这两个锚点,否则如果有效数字之前或之后有东西,它也会匹配。

<强>更新 我不知道,但是如果你想禁止在小数部分中没有两位数的前导零和数字,那么试试这个:

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

我删除了可选部件,因此需要有一个点和两位数字。

(?!0\d)是一个负向前瞻,可确保数字不以0开头,而是直接跟随数字。

答案 3 :(得分: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;
}

答案 4 :(得分: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场比赛,这将有效。如果你有更多,你必须欺骗表达式并决定如何连接结果数组。

答案 5 :(得分:0)

使用此正则表达式:^(?:100(?:\.0{1,2})?|[0-9]{1,2}(?:\.[0-9]{1,2})?)$

答案 6 :(得分: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 here:http://jsfiddle.net/jfriend00/rDbAp/