检查是否在字符串MM / YY中添加了“ /”,并使用Include使用Javascript添加

时间:2018-09-12 16:20:09

标签: javascript insert include substring

我试图“检查” MM / YY的字段是否在第三个字符处包含“ /”,如果不是,则在提交表单之前使用Javascript将其添加。例如,如果用户输入“ 0120”,则我希望此功能提交表单,就像用户输入“ 01/20”一样。

如果用户已经输入“ 01/20”,我希望它什么也不做。最简单的方法是什么?我在下面的尝试无效。

 <input id="month-year">



 var monthYear = document.getElementById('month-year').value;

        if(monthYear.includes("/")) {
              //do nothing
            } else {
              monthYear = monthYear.insert(2,"/");
        }

我知道这里还有其他有关如何验证输入模式是否包含“ /”的问题,但是我不太关心仅为了告诉用户“重试”而验证模式,而是更关心在我们的一端自动更正它,因此用户不必(我找不到)。

3 个答案:

答案 0 :(得分:0)

您可以使用.indexOf方法执行该操作,如果不存在模式,则返回-1。

const offset = monthYear.indexOf("/");
if (offset === 2) {
  // match with "01/20"
} else {
  // it's maybe an other data e.g. "foobar"
}

但是您应该使用正则表达式进行更深入的研究:

const match = /(\d\d)\/?(\d\d)?(\d\d)/.exec(monthYear);
if (match) {
  monthYear = match[1] + '/' + match[3];
} else {
  // bad month-year format
}

答案 1 :(得分:0)

如果您使用的是IE,则.includes将不起作用。否则,您发布的代码很好,其他地方还有一个错误。

您也可以只使用/应该位于的索引。或RegExp。

const bad = '0118'
const good = '01/18'
const re = /\d\d\/\d\d/

console.log( bad.includes('/'), good.includes('/') ) // false true

console.log( bad[2] === '/', good[2] === '/' ) // false true

console.log( re.test(bad), re.test(good) ) // false true

答案 2 :(得分:0)

正确确定日期字符串缺少'/'之后,您要查找的是数组拼接。

how to insert an item into an array at a specific index

使用arrMonthYear = monthYear.split('');将您的字符串转换为数组。 然后,您可以使用splice在索引处插入。 并使用join将其转换回字符串。

if(monthYear.includes("/")) {
              //do nothing
            } else {
              arrMonthYear = monthYear.split('');
              //[M, M, Y, Y]
              arrMonthYear.splice(2, 0, "/");
              // [M, M, '/', Y, Y]
              strMonthYear = arrMonthYear.join(''))
              // new string with format MM/YY
        }

您也可以将字符串作为字符串来操作,但是大多数方法都不那么简单:string manipulation,并且无论如何都需要将字符串视为数组。