Проверьте, добавлен ли "/" в строку MM / YY, добавьте с помощью Javascript, используя Включить - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь «проверить», чтобы увидеть, содержит ли поле для MM / YY символ «/» на 3-м символе, а если нет, то с помощью 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 голосов
/ 12 сентября 2018

Если вы в 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
0 голосов
/ 12 сентября 2018

После того, как вы правильно определили, что в вашей строке даты отсутствует символ '/', вы ищете массив массива.

как вставить элемент в массив с определенным индексом

Use arrMonthYear = monthYear.split ('');превратить вашу строку в массив.Затем вы можете использовать сплайс для вставки в индекс.и используйте объединение, чтобы превратить его обратно в строку.

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
        }

Вы можете также просто манипулировать строкой как строкой, но большинство из этих методов не так просты: манипулирование строкой и включает обработкуВ любом случае строка как массив.

0 голосов
/ 12 сентября 2018

Вы можете использовать методы .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
}
...