Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Espressione regolare

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    2,929

    Espressione regolare

    ciao a tutti,

    ho un problema con una espressione regolare

    in pratica si aspetta una data in questo formato 25-11-2005 mentre io la passo 2005-11-25 e quindi non fà il suo lavoro a dovere come posso risolvere??

    codice:
    function str2dt (str_datetime) {
    
    	var re_date = /^(\d+)\-(\d+)\-(\d+)/;
    	if (!re_date.exec(str_datetime))
    		return alert("Invalid Datetime format: "+ str_datetime);
    	return (new Date (RegExp.$3, RegExp.$2-1, RegExp.$1, RegExp.$4, RegExp.$5, RegExp.$6));
    }
    function dt2dtstr (dt_datetime) {
    	return (new String (
    			dt_datetime.getFullYear()+"-"+(dt_datetime.getMonth()+1)+"-"+dt_datetime.getDate()+" "));
    
    }
    Grazie mille

  2. #2
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    cambia l'espressione regolare
    var re_date = /^(\d+)\-(\d+)\-(\d+)/;

    in questa
    var re_date = /^(\d){2}\-(\d){2}\-(\d){4}$/;
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    2,929
    cosi mi esce

    Invalid Datetime format

    :master:

  4. #4
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    Originariamente inviato da fcaldera
    cambia l'espressione regolare
    var re_date = /^(\d+)\-(\d+)\-(\d+)/;

    in questa
    var re_date = /^(\d){2}\-(\d){2}\-(\d){4}$/;
    con la RE proposta da fcaldera si controlla che la stringa sia fatta così:
    2 numeri un trattino 2 numeri un trattino 4 numeri
    quindi accetta 25-11-2005 come 99-88-0000

    con al RE di Rosella invece si accettavo gruppi di 3 numeri divisi da trattino
    quindi accetta 25-11-2005 come 2005-11-25 come 7476-662565235623-63

    a Rosse'... che devi fare di preciso? trasformare una stringa del tipo 2005-11-25 in data?

  5. #5
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    dunque se devi passare la data in formato gg/mm/aaaa
    usi l'espressione regolare di prima

    se invece devi passare la data in formato aaaa/mm/gg
    allora usa

    var re_date = /^(\d){4}\-(\d){2}\-(\d){2}$/;
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    2,929
    grazie mille ad entrambi,

    sto cercando di modificare questo javascript di esempio

    li la data esce in questo formato 25-11-2005 mentre io ho bisogno della data cosi 2005-11-25

    il file in questione è ts_picker.js l'originale lo potete vedere dal link il mio è questo
    codice:
    function show_calendar(str_target, str_datetime) {
    	var arr_months = ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno",
    		"Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"];
    	var week_days = ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa"];
    	var n_weekstart = 1; // day week starts from (normally 0 or 1)
    
    	var dt_datetime = (str_datetime == null || str_datetime =="" ?  new Date() : str2dt(str_datetime));
    	var dt_prev_month = new Date(dt_datetime);
    	dt_prev_month.setMonth(dt_datetime.getMonth()-1);
    	var dt_next_month = new Date(dt_datetime);
    	dt_next_month.setMonth(dt_datetime.getMonth()+1);
    	var dt_firstday = new Date(dt_datetime);
    	dt_firstday.setDate(1);
    	dt_firstday.setDate(1-(7+dt_firstday.getDay()-n_weekstart)%7);
    	var dt_lastday = new Date(dt_next_month);
    	dt_lastday.setDate(0);
    	
    
    	var str_buffer = new String (
    		"<html>\n"+
    		"<head>\n"+
    		"	<title>Calendar</title>\n"+
    		"</head>\n"+
    		"<body bgcolor=\"White\">\n"+
    		"<table class=\"clsOTable\" cellspacing=\"0\" border=\"0\" width=\"100%\">\n"+
    		"<tr><td bgcolor=\"#4682B4\">\n"+
    		"<table cellspacing=\"1\" cellpadding=\"3\" border=\"0\" width=\"100%\">\n"+
    		"<tr>\n	<td bgcolor=\"#4682B4\"><a href=\"javascript:window.opener.show_calendar('"+
    		str_target+"', '"+ dt2dtstr(dt_prev_month)+"');\">"+
    		"<img src=\"../images/prev.gif\" width=\"16\" height=\"16\" border=\"0\""+
    		" alt=\"previous month\"></a></td>\n"+
    		"	<td bgcolor=\"#4682B4\" colspan=\"5\">"+
    		"<font color=\"white\" face=\"tahoma, verdana\" size=\"2\">"
    		+arr_months[dt_datetime.getMonth()]+" "+dt_datetime.getFullYear()+"</font></td>\n"+
    		"	<td bgcolor=\"#4682B4\" align=\"right\"><a href=\"javascript:window.opener.show_calendar('"
    		+str_target+"', '"+dt2dtstr(dt_next_month)+"');\">"+
    		"<img src=\"../images/next.gif\" width=\"16\" height=\"16\" border=\"0\""+
    		" alt=\"next month\"></a></td>\n</tr>\n"
    	);
    
    	var dt_current_day = new Date(dt_firstday);
    
    	str_buffer += "<tr>\n";
    	for (var n=0; n<7; n++)
    		str_buffer += "	<td bgcolor=\"#87CEFA\">"+
    		"<font color=\"white\" face=\"tahoma, verdana\" size=\"2\">"+
    		week_days[(n_weekstart+n)%7]+"</font></td>\n";
    
    	str_buffer += "</tr>\n";
    	while (dt_current_day.getMonth() == dt_datetime.getMonth() ||
    		dt_current_day.getMonth() == dt_firstday.getMonth()) {
    
    		str_buffer += "<tr>\n";
    		for (var n_current_wday=0; n_current_wday<7; n_current_wday++) {
    				if (dt_current_day.getDate() == dt_datetime.getDate() &&
    					dt_current_day.getMonth() == dt_datetime.getMonth())
    
    					str_buffer += "	<td bgcolor=\"#FFB6C1\" align=\"right\">";
    				else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6)
    
    					str_buffer += "	<td bgcolor=\"#DBEAF5\" align=\"right\">";
    				else
    
    					str_buffer += "	<td bgcolor=\"white\" align=\"right\">";
    
    				if (dt_current_day.getMonth() == dt_datetime.getMonth())
    
    					str_buffer += "<a href=\"javascript:window.opener."+str_target+
    					".value='"+dt2dtstr(dt_current_day)+"'; window.close();\">"+
    					"<font color=\"black\" face=\"tahoma, verdana\" size=\"2\">";
    				else 
    
    					str_buffer += "<a href=\"javascript:window.opener."+str_target+
    					".value='"+dt2dtstr(dt_current_day)+"'; window.close();\">"+
    					"<font color=\"gray\" face=\"tahoma, verdana\" size=\"2\">";
    				str_buffer += dt_current_day.getDate()+"</font></a></td>\n";
    				dt_current_day.setDate(dt_current_day.getDate()+1);
    		}
    
    		str_buffer += "</tr>\n";
    	}
    
    	str_buffer +=
    		"<form name=\"cal\">\n<tr><td colspan=\"7\" bgcolor=\"#87CEFA\">"+
    		"<font color=\"White\" face=\"tahoma, verdana\" size=\"2\">"+
    		"</font></td></tr>\n</form>\n" +
    		"</table>\n" +
    		"</tr>\n</td>\n</table>\n" +
    		"</body>\n" +
    		"</html>\n";
    
    	var vWinCal = window.open("", "Calendar", 
    		"width=200,height=250,status=no,resizable=yes,top=200,left=200");
    	vWinCal.opener = self;
    	var calc_doc = vWinCal.document;
    	calc_doc.write (str_buffer);
    	calc_doc.close();
    }
    
    function str2dt (str_datetime) {
    
    	var re_date = /^(\d){2}\-(\d){2}\-(\d){4}$/;
    	if (!re_date.exec(str_datetime))
    		return alert("Invalid Datetime format: "+ str_datetime);
    	return (new Date (RegExp.$3, RegExp.$2-1, RegExp.$1, RegExp.$4, RegExp.$5, RegExp.$6));
    }
    function dt2dtstr (dt_datetime) {
    	return (new String (
    			dt_datetime.getFullYear()+"-"+(dt_datetime.getMonth()+1)+"-"+dt_datetime.getDate()+" "));
    
    
    }
    function dt2tmstr (dt_datetime) {
    	return (new String (
    			dt_datetime.getHours()+":"+dt_datetime.getMinutes()+":"+dt_datetime.getSeconds()));
    }
    
    
    function controllo1(uno, due) {
      temp1 = uno.split("-");
      temp2 = due.split("-");
    
      d1 = new Date(temp1[0], temp1[1]-1, temp1[2]);
      d2 = new Date(temp2[0], temp2[1]-1, temp2[2]);
      
      g1 = d1.getDay()
      g2 = d2.getDay() 
      
      giorni = new Array("DOMENICA","LUNEDI''","MARTEDI''","MERCOLEDI''","GIOVEDI''","VENERDI''","SABATO") 
    	risultato1 = giorni[g1] // deve essere un sabato
    	risultato2 = giorni[g2] // deve essere un venerdì
    	
    	
    	if(uno == ""){
    	alert("SELEZIONARE LA DATA DI ARRIVO");
    	document.formData.data1.focus();
    	return false;
    	}
    
    	if(due == ""){
    	alert("SELEZIONARE LA DATA DI PARTENZA");
    	document.formData.data2.focus();
    	return false;
    	}
    	
      if (d2 < d1) {
      alert ("LA DATA DI PARTENZA E' ANTECEDENTE A QUELLA DI ARRIVO");
      document.formData.data2.focus();
      return false; 
    
      }
    	if(d1.getDay() != 6) { 
    		alert("ATTENZIONE IL "+uno+" NON E' SABATO E' "+risultato1+"\n\n LA DATA DI ARRIVO DEVE ESSERE DI SABATO"); 
    		document.formData.data1.focus();
    		return false; 
    	
    	} 
    
    	if(d2.getDay() != 6) { 
    		alert("ATTENZIONE IL "+due+" NON E' SABATO E' "+risultato2+"\n\n LA DATA DI PARTENZA DEVE ESSERE DI SABATO"); 
    		document.formData.data2.focus();
    		return false; 
    	
    	}
    }
    :master:

  7. #7
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    ah... trattasi di calendariuzzo popup... ne avevo fatto uno anche io...

    dalle modifiche che hai fatto mi sembra che tu voglia il formato 2005-11-25 senza l'orario. Se è così sostituisci le ultime 3 funzioni con queste
    codice:
    function str2dt (str_datetime) {
    	var re_date = /^(\d+)\-(\d+)\-(\d+)$/;
    	if (!re_date.exec(str_datetime))
    		return alert("Invalid Datetime format: "+ str_datetime);
    	return (new Date (RegExp.$1, RegExp.$2-1, RegExp.$3));
    }
    function dt2dtstr (dt_datetime) {
    	return (new String (
    			dt_datetime.getFullYear()+"-"+(dt_datetime.getMonth()+1)+"-"+dt_datetime.getDate()));
    }
    function dt2tmstr (dt_datetime) {
    	return "";
    }

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    2,929
    perfetto!!!!!!



    grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.