必须使用JS使用hypen来验证月份

时间:2017-12-14 06:50:54

标签: javascript jquery html

需要通过使用像JAN-FEB,FEB-MAR ......这样的宣传来验证月份。在这里,我遵循了代码,

function myFunction() {
  var patt=/^((["JAN"]+)|(["FEB"]+))$/
  text = document.getElementById("p01").innerHTML;
  document.getElementById("demo").innerHTML = patt.test(text);
}
<p id="p01">JAN-FEB</p>
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>

一旦我验证了这一点,我就得到了错误,但我希望这是真的。它必须只用大写字母开头3个字母的月份名称来验证,如JAN-FEB,JAN-DEC,FEB-JUN,....同样适用于所有类型的月份。

4 个答案:

答案 0 :(得分:1)

这是你可以做到的一种方式。我们的想法是获取月份字符串,用连字符分隔它并测试它以获得一组预定义的蛾缩写。

function myFunction() {

   var monthsAbvs = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC']


   var monthPattern = document.getElementById("p01").innerHTML;

   var months = monthPattern.split('-');     //This creates an array with two separated strings

   if (months.length > 2)                     //Only two month abbreviations are expected
      return false;

   if (monthsAbvs.indexOf(months[0]) < 0 || (monthsAbvs.indexOf(months[1]) < 0)   //Both montsh should be in our list
      return false;


   return true;   //Everything is good by here 


}

答案 1 :(得分:1)

您可以使用正则表达式从p代码中获取月份名称,并使用months检查每个月在array#every数组中是否存在。

var myFunction = function() {
  var months = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'],
  text = document.getElementById("p01").innerHTML;
  var match = text.match(/(\w+){3}-(\w+){3}/g);
  document.getElementById("demo").innerHTML = match ? match[0].split('-').every(month => months.includes(month)) : false;
}
<p id="p01">JAN-FEB</p>
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>

答案 2 :(得分:0)

抱歉,我无法添加评论,但你的问题不是很清楚,如果你想验证你有3个大写字母,后跟一个连字符,然后是大写字母字符,那么你可以使用类似的东西:

/[A-Z]+\-[A-Z]+/

或只复制三个字母,如: / [A-Z] [A-Z] [A-Z] - [A-Z] [A-Z] [A-Z] /

这当然不会检查几个月的溢出情况。 如果我没有正确理解,请添加评论!

答案 3 :(得分:0)

请参阅下面的相关摘要以及相关评论。为了防止这种情况发生,您需要执行以下几项检查

function validateMonthRange() {
    var months = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'];  //Array of months
    var monthVal = $('selector').split('-'); //get the 2 months value
    if(monthVal.length == 2) {  //if there are 2 values only
        var startIndex = months.indexOf(monthVal[0].toUpperCase());
        var endIndex = months.indexOf(monthVal[1].toUpperCase());
        if(startIndex >= 0 && endIndex >= 0 && startIndex <= endIndex) {
            //valid if both values are in array and start month is less than or equal to the end month
        }
    }