Сообщение от Gvozd
|
чтобы понять чего хочет хочет ТС, и не задавать глупых вопросов не имеющих к его задаче никакого отношения?
Мы же тут не на свободную тему общаемся, а все-таки вполне конкретную задачу решаем?
eca,
Вот так, в лоб можно решить вашу задачу
function is_date_format(str) {
var a = str.match(/^(y{4}|[dmy]{2})([^a-zA-Z0-9]+)(y{4}|[dmy]{2})([^a-zA-Z0-9]+)(y{4}|[dmy]{2})$/);
if(a.length != 6) {
return false;
}
var b = {};
b[a[1].substring(0,1)] = 1;
b[a[3].substring(0,1)] = 1;
b[a[5].substring(0,1)] = 1;
if(b.d && b.m && b.y) {
return true;
} else {
return false;
}
}
alert(is_date_format('dd-mm-yyyy'));
alert(is_date_format('dd-mm-dd'));
|
в общем всё верно, но регулярку надо немного поменять на
/^(y{4}|[dmy]{2})([^a-zA-Z0-9]+)(y{4}|[dmy]{2})([^a-zA-Z0-9]+)(y{4}|[dmy]{2})$/
так как в вашем случае 'dm-mm-yyyy' возвращает true, а 'd-m-yyyy' выдает ошибку.
я уже сделал практически также, как у вас
function is_date_format(format) {
var formatRegExp = /^(d{1,2}|m{1,2}|y{4}|y{2})([^a-zA-Z0-9]+)(d{1,2}|m{1,2}|y{4}|y{2})\2(d{1,2}|m{1,2}|y{4}|y{2})$/;
if ( format.match(formatRegExp) === null ) {
throw new Error('date format regexp error');
}
var delimiter = formatRegExp.exec(format)[2];
var delimiterFirstIndex = format.indexOf(delimiter);
var delimiterLastIndex = format.lastIndexOf(delimiter);
var firstChar = format.charAt(delimiterFirstIndex-1);
var secondChar = format.charAt(delimiterFirstIndex + delimiter.length);
var thirdChar = format.charAt(delimiterLastIndex + delimiter.length);
if ( firstChar === secondChar || secondChar === thirdChar || firstChar === thirdChar ) {
throw new Error('date fomat char error');
}
return true;
}
console.log(is_date_format('d-m-d'));
но у вас более лаконично получилось, спасибо за ответ!!