我有一个正则表达式,我正在检查文本条目是否为数字。这是Year字段,它应该只接受像1999或2000等整数。但在这种情况下,它也接受 - ,+ ,.等
isNumeric = function(b){
return(b-0) == b&&(b+"").replace(/^\s+|\s+$/g,"").length > 0
};
你能帮帮我!!
答案 0 :(得分:2)
如果您需要接受20年 th 和21 th 世纪的年份,可以使用更精确的正则表达式
isNumeric = function(b){
return /^(19|20)\d{2}$/.test(b)
};
如果您需要始终接受4位数的年份,那么正则表达式就是
/^\d{4}$/
如果您需要每年接受0到9999(不接受0的结尾)
/^(0|[1-9]\d{0,3})$/
答案 1 :(得分:1)
你可以检查它:
if(!isNaN(parseInt(yourstring))){
}
并使用正则表达式,你可以这样做:
/^[0-9]+$/i.test(yourstring)
答案 2 :(得分:1)
更好的解决方案是限制用户使用Javascript Create函数输入除Numeric之外的键,如下所示:
function isNumber(evt) {
evt = (evt) ? evt : window.event;
var charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode > 31 && (charCode < 48 || charCode > 57)) {
return false;
}
return true;
}
并将onkeypress
事件添加到文本框中:
<input type="text" class="textfield" value="" id="extra7" name="extra7"
onkeypress="return isNumber(event)" />
演示:JS Fiddle
您还可以通过将maxlength="4"
添加到收件箱来限制用户仅输入4个数字。
答案 3 :(得分:1)
如果您希望验证一系列(正)年份,例如1980年至2020年,其中不接受字符串'+2000'。
isNumeric = function(b){
return /^(198\d|200\d|2020)$/.test(b);
}
这将通过以下测试 - 它已经过测试here
功能已重命名为yearRange
yearRange = function(b){
return /^(198\d|200\d|2020)$/.test(b);
}
test('Year range validation', function() {
equal( yearRange(1979), false, '1979 returns false');
equal( yearRange(1980), true, '1980 returns true');
equal( yearRange('2000'), true, 'The string 2000 returns true');
equal( yearRange(+2000), true, '+2000 returns true' );
equal( yearRange(-2000), false, '-2000 returns false' );
equal( yearRange('+2000'), false, 'The string +2000 returns false');
equal( yearRange('-2000'), false, 'The string -2000 returns false');
});