Проверьте дату правильно + регулярное выражение Angular4 - PullRequest
0 голосов
/ 24 октября 2018

У меня есть форма в Angular4, с 2 датами: началось, закончено.

Я хочу проверить, что формат даты - дд / мм / гггг.

Я написал:

     <input  pattern="((0)*[1-9]|[1-2][0-9]|(3)[0-1])(\/)(((0)*[1-9])|((1)[0-2]))(\/)\d{4}$" [(ngModel)]="filterDateStart" class="form-control" type="date" id="filterDateStart" name="filterDateStart"  clrDate>

    <input   pattern="((0)*[1-9]|[1-2][0-9]|(3)[0-1])(\/)(((0)*[1-9])|((1)[0-2]))(\/)\d{4}$" [(ngModel)]="filterDateEnd" class="form-control" type="date" id="filterDateEnd" name="filterDateEnd"  clrDate>

Затем, когда я пишу недействительные даты, мой HTML ничего не говорит ... Я могу отправить эту форму.

enter image description here

Тогда мне нужно проверить эти даты.

 1º Date start < date end
 2º Ranges valid -> (30/20/2018) or (32/12/2018)

Я вижу библиотеку moment.js, но мой босс говорит, что я не должен быть этим.спасибо, извините за мой английский.

1 Ответ

0 голосов
/ 24 октября 2018

Не используйте регулярные выражения, используйте API Date:

const valid = '12/12/2018';
const invalid1 = '12/12';
const invalid2 = '12.12.2018';
const invalid3 = 'foo';

function parseDate(date) {
  try {
    // Make your business logic here. Examples : all must be defined and numbers, and separated with a /
    const [d, m, y] = date.split('/');
    
    if (!d || !m || !y) throw new Error();
    
    if(isNaN(d) || isNaN(m) || isNaN(y)) throw new Error();
    
    return new Date(y, m, d);
  } catch(err) {
    return 'Invalid date';
  }
}

console.log(parseDate(valid));
console.log(parseDate(invalid1));
console.log(parseDate(invalid2));
console.log(parseDate(invalid3));

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...