Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   regexp формат даты (https://javascript.ru/forum/misc/24844-regexp-format-daty.html)

eca 23.01.2012 12:59

Цитата:

Сообщение от Gvozd (Сообщение 151231)
чтобы понять чего хочет хочет ТС, и не задавать глупых вопросов не имеющих к его задаче никакого отношения?
Мы же тут не на свободную тему общаемся, а все-таки вполне конкретную задачу решаем?

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'));

но у вас более лаконично получилось, спасибо за ответ!!


Часовой пояс GMT +3, время: 06:41.