我想仅允许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。请帮帮我。谢谢
答案 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)?)$
(?:)
是非捕获组,这意味着此组中的匹配不会存储到变量中。
\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/