Регулярное выражение регулярных выражений для формата MMYY для текущего года (например, 19 и будущих лет в JavaScript) - PullRequest
0 голосов
/ 03 октября 2019

Мне нужно, чтобы в кредитной карте использовалось регулярное выражение, правило простое, формат должен быть MMYY.

Я мог бы добиться этого с помощью этого регулярного выражения.

/^(0[1-9]|1[0-2])\d{2}$/

Сейчас я исследую применение проверки, чтобы сделать ГГ 19 для текущего года и в последующие годы.

Может быть, сделать его динамичным сложно, но я могу заменить строку 19 из текущейгод в javascript, так что теперь я просто хочу, чтобы он был исправлен для 19 и выше.

Пример правильного MMYY:

0126

1220

0119

Пример In Valid MMYY

0101

1111

1218

Вот здесьссылка на то, что у меня есть Пример для моего reg exp выглядит как

Ответы [ 3 ]

1 голос
/ 03 октября 2019

Учитывая год, для которого должен пройти этот год и будущие годы, было бы немного утомительно динамически создавать такое регулярное выражение. Попробуйте вместо этого использовать группу захвата, а затем просто проверьте, больше или равно ли захваченный YY предел:

const yearLimit = 19; // or pass this as an argument if you want

const re = /^(?:0[1-9]|1[0-2])(\d{2})$/;
const match = str.match(re);
if (!match) {
  return false;
}
const year = Number(match[1]);
return year >= yearLimit;

const validate = (str) => {
  const yearLimit = 19; // or pass this as an argument if you want

  const re = /^(?:0[1-9]|1[0-2])(\d{2})$/;
  const match = str.match(re);
  if (!match) {
    return false;
  }
  const year = Number(match[1]);
  return year >= yearLimit;
};

console.log(
  validate('1234'),
  validate('1212')
);

^(?:0[1-9]|1[0-2])(\d{2})$ означает

  • ^ - Начало строки соответствует
  • (?:0[1-9]|1[0-2]) - Соответствует 01-12: либо
    • 0[1-9] - ведущий 0, за которым следует число от 1 до 9, либо
    • 1[0-2] - ведущий 1, за которым следует число от 0 до 2
  • (\d{2}) - сопоставить и записать любые две цифры
  • $ - сопоставить конец строки
0 голосов
/ 03 октября 2019

Вот динамическое решение для вашего ответа

    var date = new Date()
    var a = date.getFullYear().toString().substr(2,2).split('')
    var monthRegex = "(0[1-9]|1[0-2])"
    var yearRegex1 = "([" + a[0] + "-9][" + a[1] + "-9])"
    var yearRegex2 = "([" + (parseInt(a[0], 10) + 1) + "-9][0-9])"

    var regex2 = new RegExp("^" + monthRegex + yearRegex1 + "|" + yearRegex2 + "$");
    
    console.log(regex2.test('1218'))
    console.log(regex2.test('1219'))
    console.log(regex2.test('1239'))

Надеюсь, это поможет

0 голосов
/ 03 октября 2019

Код ниже будет работать, если вы хотите решить его только с помощью регулярных выражений.

const currentYear = 19;
const currentDecade = currentYear/10;
const unitPlaceCurrentYear = currentYear%10;
regex_string = `^(0[1-9]|1[0-2])(1[${unitPlaceCurrentYear}-9]|[${currentDecade+1}-9][0-9])$`

var re = new RegExp(regex_string);

inputs = ['0126','1220','0119','0101','1111','1218'];
inputs.map((str) => {
  let match = str.match(re);
  if (match) console.log('matched: ' + str);
  else console.log('Did not match: ' + str);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...