使用Regex ,我想允许用户输入最多5位数的号码。最多2个小数位,允许非零"
喜欢 67823.67或1或1.2
不喜欢 .3或3242.34234.34或234.2342
下面的代码允许数字和句点。但也允许(.3或3242.34234.34或234.2342)
$('input').keyup(function () {
if (this.value.match(/[^0-9\.]/g))
this.value = this.value.replace(/[^0-9\.]/g, '');
});
下面的代码按预期工作(来源:http://www.mysamplecode.com/2011/10/javascript-validate-input-text-field.html)
function testInputData(myfield, restrictionType) {
var decimalOnly = /^\s*-?[1-9]\d*(\.\d{1,2})?\s*$/ ;
var myData = document.getElementById(myfield).value;
if (myData !== '') {
if (restrictionType.test(myData)) {
alert('It is GOOD!');
} else {
alert('Your data input is invalid!');
}
} else {
alert('Please enter data!');
}
return;
}
HTML
<table>
<tr>
<td>
Check for upto 2 Decimal:
</td>
<td>
<input type="text" id="input2" maxlength="30" size="30" />
</td>
<td>
<input type="button" value="Test" onclick="Javascript:testInputData('input2',decimalOnly)" />
</td>
</tr>
</table>
但是,这不起作用,
$('input').keyup(function () {
if (this.value.match(/^\s*-?[1-9]\d*(\.\d{1,2})?\s*$/g))
this.value = this.value.replace(/^\s*-?[1-9]\d*(\.\d{1,2})?\s*$/g, '');
});
HTML
<table>
<tr>
<td>
<asp:TextBox ID="txt1" runat="server" Width="50"/>
</td>
</tr>
</table>
答案 0 :(得分:0)
我认为这应该适合你。
(\d{1,3}\.\d{1,2}|\d{4}\.\d|\d{1,5})
它首先检查它是否符合格式123.4
或123.45
,但未检查它是否符合格式1234.5
,未能检查是否符合整数一到五位数。
如果您不想允许{1,2}
而非想要123.4
,您可能希望将123.40
更改为一个。
如果整个字段都遵循此格式,您可以执行以下操作:
$('input').keyup(function () {
if (!(this.value.match(/^(\d{1,3}\.\d{1,2}|\d{4}\.\d|\d{1,5})$/)))
alert('value DOES NOT fit pattern');
});
更新,我更喜欢这个版本的上述正则表达式,似乎工作得更快。
$('input').change(function () {
var rmatch = new RegExp("^(?!(?=\\d+\\.\\d+$)(.{3,6}$)|(?=\\d{1,5}$)).+$");
if (this.value.match(rmatch)) {
this.value = "";
}
});
根据你的评论和你对全球的使用,你似乎想要这样的东西..你不能使用一个关键事件,因为当一个人想输入小数时它会跳闸。您可以修改此正则表达式以接受onKeyDown
,但您需要单独的正则表达式才能捕获。它最终是一个大混乱,使用blur()
imo。
$('input').blur(function () {
var rmatch = new RegExp("(\\d{1,3}\\.\\d{1,2}|\\d{4}\\.\\d|\\d{1,5})","g");
var getMatches = this.value.match(rmatch);
if (getMatches) {
this.value = getMatches.join(" ");
} else {
this.value = "";
}
});
我是根据您使用g
的方式编写的,但也许您只想在框中使用一个数字(更有可能)。我会这样做
$('input').blur(function () {
var rmatch = new RegExp("^(\\d{1,3}\\.\\d{1,2}|\\d{4}\\.\\d|\\d{1,5})$","g");
var getMatches = this.value.match(rmatch);
if (!getMatches) {
this.value = "";
}
});