使用Javascript检查特定格式的输入值

时间:2013-02-18 13:03:26

标签: javascript regex input validation

我有一个输入字段,允许用户输入日期。

我需要此日期采用以下格式: 10Jan13 (大小写并不重要)

有一个弹出日历,如果使用,将为用户正确格式化日期。

我想使用Javascript检查输入onblur的值,以确保用户没有粘贴或不正确地键入日期。

我目前正在检查仅限数字的字段:

var numbers = /^[0-9]+$/;

if (!BIDInput.value.match(numbers))
{
    checkedInput.value = "";
    alert('Not a number');
}

我正在检查这样的字母字段:

var letters = /^[a-z]+$/ 

if (!nameInput.value.match(letters))
{
 nameInput.value = "";
     alert('Not a letter');
}

如果可能的话,我想以类似的方式检查日期格式。但任何完成任务的事情都可以。有人能指出我如何完成这项工作的正确方向吗?

我知道客户端验证不会取代服务器端验证。这仅用于用户体验目的。

2 个答案:

答案 0 :(得分:3)

你几乎拥有你拥有的东西。基本上你的格式是一个或两个数字,然后是12个可能的字符串之一,后跟两个数字。例如:

var shortDateRex = /^\d{1,2}(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\d{2}$/;

故障:

  • ^字符串的开头。

  • \d{1,2}一位或两位数。

  • (:?...)非捕获组。或者,如果您愿意,可以使用捕获组。

  • Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec 替换,允许这12个选项中的任何一个。当然,如果你愿意,你可以添加更多。如果您有两个以相同方式开始的选择(例如JanJanuary),请在交替中提前选择较长的选项。

  • \d{2}两位数。


旁注:原则上我不得不建议反对两位数的日期,特别是考虑到我们目前所处的世纪!


回应Amberlamps的评论,即这不会验证日期:一旦您验证了格式,如果您愿意,那么检查日期本身是微不足道的(排除{{1例如):

30Feb13

......或类似的东西。

Live Example | Source

或者,如果(像我一样)你不想看到重复的月份名称列表,你可以使用带有字符串的var validateDateString = (function() { var monthNames = "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec".toLowerCase().split("|"); var dateValidateRex = /^(\d{1,2})(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)(\d{2})$/i; var arbitraryCenturyCutoff = 30; function validateDateString(str) { var match; var day, month, year; var dt; match = dateValidateRex.exec(str); if (!match) { return false; } day = parseInt(match[1]); month = monthNames.indexOf(match[2].toLowerCase()); // You may need a shim on very old browsers for Array#indexOf year = parseInt(match[3], 10); year += year > arbitraryCenturyCutoff ? 1900 : 2000; dt = new Date(year, month, day); if (dt.getDate() !== day || dt.getMonth() !== month || dt.getFullYear() !== year) { // The input was invalid; we know because the date object // had to adjust something return false; } return true; } return validateDateString; })(); 构造函数,但你必须记住复制反斜杠:

RegExp

Live Example | Source

答案 1 :(得分:2)

您可以使用以下正则表达式来检查以2个数字开头的字符串,后跟3个字符,后跟2个数字

[0-9]{2}[a-zA-Z]{3}[0-9]{2}