Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите разобраться с регэкспом
 
 автор: AlexShag   (13.03.2013 в 19:43)   письмо автору
 
 

 var dateRegEx = /^\d{1,2}\/\d{1,2}\/\d{2}|\d{4}$/;


Подозреваю что здесь идет какая то проверка на "/". Если так то как мне заменить "/" на "-" (то есть косую на тире, чтобы календарик отображал тире, а не косую)?

Полный код
(function($) { 

    var today = new Date();
    var months = 'Сiчень,Лютий,Березень,Квiтень,Травень,Червень,Липень,Серпень,Вересень,Жовтень,Листопад,Грудень'.split(',');
    var monthlengths = '31,28,31,30,31,30,31,31,30,31,30,31'.split(',');
    var dateRegEx = /^\d{1,2}\/\d{1,2}\/\d{2}|\d{4}$/;
    var yearRegEx = /^\d{4,4}$/;

    $.fn.simpleDatepicker = function(options) {

        var opts = jQuery.extend({}, jQuery.fn.simpleDatepicker.defaults, options);
        setupYearRange();
        function setupYearRange () {
            
            var startyear, endyear;  
            if (opts.startdate.constructor == Date) {
                startyear = opts.startdate.getFullYear();
            } else if (opts.startdate) {
                if (yearRegEx.test(opts.startdate)) {
                startyear = opts.startdate;
                } else if (dateRegEx.test(opts.startdate)) {
                    opts.startdate = new Date(opts.startdate);
                    startyear = opts.startdate.getFullYear();
                } else {
                startyear = today.getFullYear();
                }
            } else {
                startyear = today.getFullYear();
            }

                        startyear=startyear-10;
            opts.startyear = startyear;

            
            if (opts.enddate.constructor == Date) {
                endyear = opts.enddate.getFullYear();
            } else if (opts.enddate) {
                if (yearRegEx.test(opts.enddate)) {
                    endyear = opts.enddate;
                } else if (dateRegEx.test(opts.enddate)) {
                    opts.enddate = new Date(opts.enddate);
                    endyear = opts.enddate.getFullYear();
                } else {
                    endyear = today.getFullYear();
                }
            } else {
                endyear = today.getFullYear();
            }

                        endyear=endyear+1;
            opts.endyear = endyear;    
        }
        
        function newDatepickerHTML () {
            
            var years = [];
            
            for (var i = 0; i <= opts.endyear - opts.startyear; i ++) years[i] = opts.startyear + i;
    
            var table = jQuery('<table class="datepicker" cellpadding="0" cellspacing="0"></table>');
            table.append('<thead></thead>');
            table.append('<tfoot></tfoot>');
            table.append('<tbody></tbody>');
            
                var monthselect = '<select name="month">';
                for (var i in months) monthselect += '<option value="'+i+'">'+months[i]+'</option>';
                monthselect += '</select>';
            
                var yearselect = '<select name="year">';
                for (var i in years) yearselect += '<option>'+years[i]+'</option>';
                yearselect += '</select>';
            
            jQuery("thead",table).append('<tr class="controls"><th colspan="7"><span class="prevMonth">&laquo;</span>&nbsp;'+monthselect+yearselect+'&nbsp;<span class="nextMonth">&raquo;</span></th></tr>');
            jQuery("thead",table).append('<tr class="days"><th>Пн</th><th>Вт</th><th>Ср</th><th>Чт</th><th>Пт</th><th>Сб</th><th>Нд</th></tr>');
            jQuery("tfoot",table).append('<tr><td colspan="2"><span class="today">сьогодні</span></td><td colspan="3">&nbsp;</td><td colspan="2"><span class="close">закрити</span></td></tr>');
            for (var i = 0; i < 6; i++) jQuery("tbody",table).append('<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>');
            return table;
        }
        
        function findPosition (obj) {
            var curleft = curtop = 0;
            if (obj.offsetParent) {
                do { 
                    curleft += obj.offsetLeft;
                    curtop += obj.offsetTop;
                } while (obj = obj.offsetParent);
                return [curleft,curtop];
            } else {
                return false;
            }
        }
        
        function loadMonth (e, el, datepicker, chosendate) {
            
            var mo = jQuery("select[name=month]", datepicker).get(0).selectedIndex;
            var yr = jQuery("select[name=year]", datepicker).get(0).selectedIndex;
            var yrs = jQuery("select[name=year] option", datepicker).get().length;
            
            if (e && jQuery(e.target).hasClass('prevMonth')) {                
                if (0 == mo && yr) {
                    yr -= 1; mo = 11;
                    jQuery("select[name=month]", datepicker).get(0).selectedIndex = 11;
                    jQuery("select[name=year]", datepicker).get(0).selectedIndex = yr;
                } else {
                    mo -= 1;
                    jQuery("select[name=month]", datepicker).get(0).selectedIndex = mo;
                }
            } else if (e && jQuery(e.target).hasClass('nextMonth')) {
                if (11 == mo && yr + 1 < yrs) {
                    yr += 1; mo = 0;
                    jQuery("select[name=month]", datepicker).get(0).selectedIndex = 0;
                    jQuery("select[name=year]", datepicker).get(0).selectedIndex = yr;
                } else { 
                    mo += 1;
                    jQuery("select[name=month]", datepicker).get(0).selectedIndex = mo;
                }
            }
            
            if (0 == mo && !yr) jQuery("span.prevMonth", datepicker).hide(); 
            else jQuery("span.prevMonth", datepicker).show(); 
            if (yr + 1 == yrs && 11 == mo) jQuery("span.nextMonth", datepicker).hide(); 
            else jQuery("span.nextMonth", datepicker).show(); 
            
            var cells = jQuery("tbody td", datepicker).unbind().empty().removeClass('date');
            
            var m = jQuery("select[name=month]", datepicker).val();
            var y = jQuery("select[name=year]", datepicker).val();
            var d = new Date(y, m, 1);
            var startindex = d.getDay();if(startindex>0) startindex=startindex-1; else startindex=6;
            var numdays = monthlengths[m];
            
            if (1 == m && ((y%4 == 0 && y%100 != 0) || y%400 == 0)) numdays = 29;
            
            if (opts.startdate.constructor == Date) {
                var startMonth = opts.startdate.getMonth();
                var startDate = opts.startdate.getDate();
            }
            if (opts.enddate.constructor == Date) {
                var endMonth = opts.enddate.getMonth();
                var endDate = opts.enddate.getDate();
            }
            
            for (var i = 0; i < numdays; i++) {
            
                var cell = jQuery(cells.get(i+startindex)).removeClass('chosen');
                
                if ( 
                    (yr || ((!startDate && !startMonth) || ((i+1 >= startDate && mo == startMonth) || mo > startMonth))) &&
                    (yr + 1 < yrs || ((!endDate && !endMonth) || ((i+1 <= endDate && mo == endMonth) || mo < endMonth)))) {
                
                    cell
                        .text(i+1)
                        .addClass('date')
                        .hover(
                            function () { jQuery(this).addClass('over'); },
                            function () { jQuery(this).removeClass('over'); })
                        .click(function () {
                            var chosenDateObj = new Date(jQuery("select[name=year]", datepicker).val(), jQuery("select[name=month]", datepicker).val(), jQuery(this).text());
                            closeIt(el, datepicker, chosenDateObj);
                        });
                        
                    if (i+1 == chosendate.getDate() && m == chosendate.getMonth() && y == chosendate.getFullYear()) cell.addClass('chosen');
                }
            }
        }
        
        function closeIt (el, datepicker, dateObj) { 
            if (dateObj && dateObj.constructor == Date)
                el.val(jQuery.fn.simpleDatepicker.formatOutput(dateObj));
            datepicker.remove();
            datepicker = null;
            jQuery.data(el.get(0), "simpleDatepicker", { hasDatepicker : false });
        }

        return this.each(function() {
            
            if ( jQuery(this).is('input') && 'text' == jQuery(this).attr('type')) {

                var datepicker; 
                jQuery.data(jQuery(this).get(0), "simpleDatepicker", { hasDatepicker : false });
                
                jQuery(this).click(function (ev) {

                    var $this = jQuery(ev.target);
                    
                    if (false == jQuery.data($this.get(0), "simpleDatepicker").hasDatepicker) {
                        
                        jQuery.data($this.get(0), "simpleDatepicker", { hasDatepicker : true });
                        
                        var initialDate = $this.val();
                        
                        if (initialDate && dateRegEx.test(initialDate)) {
                                var initArr = initialDate.split('/');
                            var chosendate = new Date(initArr[1] + '/' + initArr[0] + '/' + initArr[2]);
                        } else if (opts.chosendate.constructor == Date) {
                            var chosendate = opts.chosendate;
                        } else if (opts.chosendate) {
                            var chosendate = new Date(opts.chosendate);
                        } else {
                            var chosendate = today;
                        }
                            
                        datepicker = newDatepickerHTML();
                        jQuery("body").prepend(datepicker);
                        
                        var elPos = findPosition($this.get(0));
                        var x = (parseInt(opts.x) ? parseInt(opts.x) : 0) + elPos[0];
                        var y = (parseInt(opts.y) ? parseInt(opts.y) : 0) + elPos[1];
                        jQuery(datepicker).css({ position: 'absolute', left: x, top: y });
                    
                        jQuery("span", datepicker).css("cursor","pointer");
                        jQuery("select", datepicker).bind('change', function () { loadMonth (null, $this, datepicker, chosendate); });
                        jQuery("span.prevMonth", datepicker).click(function (e) { loadMonth (e, $this, datepicker, chosendate); });
                        jQuery("span.nextMonth", datepicker).click(function (e) { loadMonth (e, $this, datepicker, chosendate); });
                        jQuery("span.today", datepicker).click(function () { closeIt($this, datepicker, new Date()); });
                        jQuery("span.close", datepicker).click(function () { closeIt($this, datepicker); });
                        
                        jQuery("select[name=month]", datepicker).get(0).selectedIndex = chosendate.getMonth();
                        jQuery("select[name=year]", datepicker).get(0).selectedIndex = Math.max(0, chosendate.getFullYear() - opts.startyear);
                        loadMonth(null, $this, datepicker, chosendate);
                    }
                    
                });
            }

        });

    };


    jQuery.fn.simpleDatepicker.formatOutput = function (dateObj) {
            var dd=dateObj.getDate();
            var mm=(dateObj.getMonth() + 1);
            var yy=dateObj.getFullYear();
            if(dd<10) dd='0'+dd;
            if(mm<10) mm='0'+mm;
        return  dd + "/" + mm + "/" + yy;
    };
    
    jQuery.fn.simpleDatepicker.defaults = {
        chosendate : today,
        
        startdate : today.getFullYear(), 
        enddate : today.getFullYear() + 1,
        
        x : 5,
        y : 26
    };

})(jQuery);

  Ответить  
 
 автор: confirm   (14.03.2013 в 09:02)   письмо автору
 
   для: AlexShag   (13.03.2013 в 19:43)
 

var dateRegEx = /^\d{1,2}\-\d{1,2}\-\d{2}|\d{4}$/;

var chosendate = new Date(initArr[1] + '-' + initArr[0] + '-' + initArr[2]);

return  dd + "-" + mm + "-" + yy;

  Ответить  
 
 автор: AlexShag   (14.03.2013 в 12:36)   письмо автору
 
   для: confirm   (14.03.2013 в 09:02)
 

Благодарю за помощь. Но только вот этого
var chosendate = new Date(initArr[1] + '-' + initArr[0] + '-' + initArr[2]); 

делать не нужно.

А нужно еще вот так
var initArr = initialDate.split('-'); 

  Ответить  
 
 автор: confirm   (14.03.2013 в 12:50)   письмо автору
 
   для: AlexShag   (14.03.2013 в 12:36)
 

Это возвращает дату в формате n/n/n, и если вам нужен разделитель -, а не /, то значит его нужно заменить везде.

  Ответить  
 
 автор: AlexShag   (14.03.2013 в 13:06)   письмо автору
 
   для: confirm   (14.03.2013 в 12:50)
 

var chosendate = new Date(initArr[1] + '-' + initArr[0] + '-' + initArr[2]); 


Это создаёт объект Даты. И если его создавать через '-' то возникает ошибка в Фоксе, а вот в ИЕ нормально хавает.

Попробуйте в фоксе этот кусок и алертните что получилось.

  Ответить  
 
 автор: confirm   (14.03.2013 в 13:20)   письмо автору
 
   для: AlexShag   (14.03.2013 в 13:06)
 

Ну да, все правильно, это уже я косяком на автомате.
Правильно для вашего формата должно быть так:
new Date(гг,мм,дд)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования