Espressione regolari max e min caratteri

Nik

Utente Attivo
15 Set 2004
92
1
8
30
Ciao a tutti, sto utilizzando uno script trovato in rete che attraverso una validazione in ajax ed un invio dati in php, permette all'utente di inviarmi un messaggio/email.

All'interno dello script trovo questa espressione regolare:

Codice:
var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
che mi permette di controllare se l'email inserita nel form è scritta correttamente oppure no. Adesso però ho la necessità di scrivere altre due espressioni regolari.

1) Il campo nome deve avere almeno 3 caratteri.
2) Il campo messaggio non può avere più di 400 caratteri.

Non essendo assolutamente pratica di espressioni regolari, prima di tutto mi chiedo.. E' possibile concepire quelle regole? Come?

Ringrazio infinitamente chiunque abbia la pazienza di aiutarmi. Ho già provato a leggere qualche guida e manuali di riferimento, ma non riesco a trovare la regola adatta.
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
Per controlli così semplici, cioè solo sulla lunghezza di una stringa, potresti usare la funzione strlen() che restituisce proprio la lunghezza di una stringa.
Per esempio:
PHP:
$lunghezza=strlen($stringa);
if($lunghezza<3) 
    echo "devi inserire almeno 3 lettere";
Nel caso 2:
PHP:
$lunghezza=strlen($stringa);
if($lunghezza>400) 
    echo "non puoi inserire più di 400 caratteri";
 

Nik

Utente Attivo
15 Set 2004
92
1
8
30
Grazie mille per la risposta, hai ragione. Purtroppo mi sono accorta di aver sbagliato la categoria della mia discussione.. perchè di fatto l'espressione regolare mi servirebbe in javascript.

C'è modo di spostare la mia discussione?
 

Nik

Utente Attivo
15 Set 2004
92
1
8
30
Questo è l'intero script che mi permette di controllare il contenuto dei campi del form:

Codice:
<script>
$(document).ready(function() { 
	 $('#Send').click(function() {  
			// validazione nominativo
			var nominativoReg = /^([a-zA-Z\xE0\xE8\xE9\xF9\xF2\xEC\x27]\s?)+$/;
			var nominativoVal = $("#nominativo").val();
			
			if(nominativoVal == '') {
			$("#nominativo_error").html('');
			$("#nominativo").after('<span class="error" id="nominativo_error">Per favore, inserisci il tuo nome.</span>');
				return false
			}
			else if(!nominativoReg.test(nominativoVal)) {
				$("#nominativo_error").html('');
				$("#nominativo").after('<span class="error" id="nominativo_error">Nominativo errato</span>');
				return false
			 
			}
			else
			{
				$("#nominativo_error").html('');
			}
			
			/// validazione email
			var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
			var emailaddressVal = $("#email").val();
			
			if(emailaddressVal == '') {
				$("#email_error").html('');
				$("#email").after('<span class="error" id="email_error">Per favore, inserisci la tua e-mail.</span>');
				return false
			}
			else if(!emailReg.test(emailaddressVal)) {
				$("#email_error").html('');
				$("#email").after('<span class="error" id="email_error">Inserisci e-mail valida.</span>');
				return false
			 
			}
			else
			{
				$("#email_error").html('');
			}
			
			// validazione messaggio
			var messaggioReg = /^\w{,300}$/;
			var messaggioVal = $("#messaggio").val();
			
			if(messaggioVal == '') {
			$("#messaggio_error").html('');
			$("#messaggio").after('<span class="error" id="messaggio_error">Per favore, inserisci il tuo messaggio.</span>');
				return false
			}
			else if(!messaggioReg.test(messaggioVal)) {
				$("#messaggio_error").html('');
				$("#messaggio").after('<span class="error" id="messaggio_error">Inserisci un messaggio valido, max 300 caratteri</span>');
				return false
			 
			}
			else
			{
				$("#messaggio_error").html('');
			}
		
			$.post("InviaMessaggio.php?"+$("#MYFORM").serialize(), {
		
			}, function(response){
			
			if(response==1)
			{
				$("#after_submit").html('');
				$("#Send").after('<span class="success" id="after_submit">Messagio Inviato.</span>');
				change_captcha();
				clear_form();
			}
			else
			{
				$("#after_submit").html('');
				$("#Send").after('<span class="error" id="after_submit">Captcha errato!</span>');
			}
			
			
		});
				
		return false;
	 });
	 
	 // refresh captcha
	 $('img#refresh').click(function() {  
			change_captcha();
	 });
	 
	 function change_captcha()
	 {
	 	document.getElementById('captcha').src="js/captcha/get_captcha.php?rnd=" + Math.random();
	 }
	 
	 function clear_form()
	 {
	 	$("#nominativo").val('');
		$("#email").val('');
		$("#messaggio").val('');
	 }
});
</script>
In origine era presente solo la validazione per l'email, seguendo lo schema volevo creare quella per il nome e il messaggio.

Vorrei poter scrivere che:
1) il nome deve contenere solo lettere, minimo 3 e magari massimo 10
2) il testo può contenere qualsiasi carattere, ad esempio la punteggiatura e deve avere massimo 300 caratteri e minimo 3

Io ci provo a scriverle, ma non funzionano. L'espressione regolare per il nominativo l'avevo trovata su internet ma non funziona correttamente. Grazie a tutti per l'aiuto, davvero.
 

Vale2

Utente Attivo
28 Mag 2006
446
0
0
Livorno
Ciao,


2) il testo può contenere qualsiasi carattere, ad esempio la punteggiatura e deve avere massimo 300 caratteri e minimo 3

non c'è un match che ingloba tutti i caratteri, definisci quali, perché andranno inseriti uno a uno nella regexp.


Per il nome se solo lettere da A - Z maiuscole e minuscole


Codice:
var nominativoReg = /^([a-zA-Z]{3,10})$/;

Valeria.
 

Nik

Utente Attivo
15 Set 2004
92
1
8
30
non c'è un match che ingloba tutti i caratteri, definisci quali, perché andranno inseriti uno a uno nella regexp.


Per il nome se solo lettere da A - Z maiuscole e minuscole


Codice:
var nominativoReg = /^([a-zA-Z]{3,10})$/;
Grazie per la risposta Valeria! Quindi ad esempio per il testo potrei cominciare a scrivere così?

Codice:
var messaggioReg = /^([a-zA-Z]+[0-9]{3,300})$/;
è giusta la mia sintassi? non ho proprio idea di come scriverlo, oppure aggiungere i vari caratteri consentiti, ad esempio .,:;?! e le lettere accentate

Dove potrei trovare una buona guida che mi permetta di capire come assemblare il tutto? Grazie per la pazienza
 

Vale2

Utente Attivo
28 Mag 2006
446
0
0
Livorno
Grazie per la risposta Valeria! Quindi ad esempio per il testo potrei cominciare a scrivere così?

Codice:
var messaggioReg = /^([a-zA-Z]+[0-9]{3,300})$/;
è giusta la mia sintassi? non ho proprio idea di come scriverlo, oppure aggiungere i vari caratteri consentiti, ad esempio .,:;?! e le lettere accentate

Dove potrei trovare una buona guida che mi permetta di capire come assemblare il tutto? Grazie per la pazienza

Ciao,

la regexp come è scritta /^([a-zA-Z]+[0-9]{3,300})$/;

obbligatoria una lettera come primo carattere ma il quantificarore minimo 3 massimo 300 {3,300} vale solo per i numeri, quindi a111 è corretta, come a e 299 numeri.

Il segno + concatena [] con [] due blocchi di tipo String.

Basta un solo blocco per scrivere caratteri alfanumerici e numeri.

Codice:
/^([a-zA-Z0-9]{3,300})$/
vuoi aggiungere . , : ; ? ! e i caratteri accentati?

Valeria.
 

Nik

Utente Attivo
15 Set 2004
92
1
8
30
Grazie mille Valeria.. Si, vorrei aggiungere anche i segni di punteggiature e le lettere accentate. Servirà per il controllo di una textarea nella quale l'utente compone un breve messaggio (max di 300 caratteri), quindi può utilizzare lettere, numeri, lettere accentate e segni di punteggiatura.

Grazie infinite per il tuo aiuto, lo apprezzo moltissimo :byebye:
 

Vale2

Utente Attivo
28 Mag 2006
446
0
0
Livorno
Ciao,


Codice:
var messaggioReg = /^([a-zA-Z0-9\u00C0-\u017F\.\,\:\;\?\!]{3,300})$/;
se vuoi aggiungere anche spazi fra le frasi o lettere:

Codice:
var messaggioReg = /^([a-zA-Z0-9\u00C0-\u017F\.\,\:\;\?\!\s]{3,300})$/;

Valeria.
 

Nik

Utente Attivo
15 Set 2004
92
1
8
30
Grazie Valeria! Non so davvero come ringraziarti :) Proverò subito il codice che mi hai fornito.. Suppongo che
Codice:
\s
serva per concedere gli spazi tra le parole..

Posso chiederti invece a cosa servono
Codice:
\u00C0-\u017F
?? Sono le lettere accentate?

:byebye: