Newsgroup: it.comp.lang.javascript
Titolo: Regular expression patten

Ciao a tutti,
dovrei scrivere un patter per la validazione di una stringa che suona
così:
almeno 8 battute carattere, almeno un numero, almeno una maiuscola.
Mi date una mano please?
Ciao e grazie
----
   strPass = document.modulo.pass;
   Filtro = /^([a-zA-Z0-9_\.\-]){8,})+$/;
   if (Filtro.test(strPass))
   else
      {
      alert("errore");
      }

OK grazie,,,come unisco i 3 pezzi con un "+"
Me lo scivi totalmente perchè non so nulla di Reg exp.
Grazie

Ho trovato in giro questa ma non sembra che funzioni...
-----
	var errors = '';
	var strNuovaPassword = document.form1.NuovaPassword.value;
	Filtro = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,15}$/;
	if(!Filtro.test(strNuovaPassword)){
		errors +="- \"Nuova password\" deve essere tra le 8 e le 30
battute,\n contenere almeno un numero, una lettera maiscola e una
minuscola\n";
	}else{
		errors +="- OK";
	}
 
	if(errors){
		alert(errors);
	}

 Ho trovato in giro questa ma non sembra che funzioni...
Sembro la Carta ti suggeriva di fare semplicemente la seguente cosa:
if ( /^[a-zA-Z0-9]{8,}$/.test(pw) && /[0-9]/.test(pw) && /[A-Z]/.test(pw)
){
	// ok
}
Se preferisci farti una funzione per fare il check in and di una serie di
regexp, potresti fare qualcosa del tipo:
function matchedAll(str){
 
	for (var i=1;i<arguments.length;i++)
		if (!arguments[i].test(str))
			return false;
	return true;
}
e poi:
if ( matchedAll(pw, /^[a-zA-Z0-9]{8,}$/,/\d/,/[A-Z]/) ){
	//ok
}
Volendo potresti anche incapsulare il tutto in un prototype:
String.prototype.matchedAll = function(){
	for (var i=1;i<arguments.length;i++)
		if (!arguments[i].test(this))
			return false;
	return true;
}
if ( pw.matchedAll(/^[a-zA-Z0-9]{8,}$/,/\d/,/[A-Z]/) ){
	// ok
}
Mai fatta una cosa del genere, ma dovrebbe andare.
-- 
"Non è una guerra.. è uno sterminio.. loro stanno a noi come 
uomini contro i  vermi.. draghi contro i lupi.. 
O uomini che cavalcano draghi e lanciano lupi addosso ai vermi!"

 }
------------------
if(/^[a-zA-Z0-9]{8,30}$/.test(strNuovaPassword) &&
/[0-9]/.test(strNuovaPassword) && /[A-Z]/.test(strNuovaPassword)){
errors +="- \"OK\" ";
}else{
errors +="- \"KO\" ";
}
Ho provato a sostituire il codice e sembra non "matcharla" sei sicuro
che è corretta?

Ti posto il codice:
---------------------------
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"
/>
<title>Documento senza titolo</title>
</head>
<script language="JavaScript" type="text/JavaScript">
function CheckForm(){
	var errors = '';
	var pw = document.form1.NuovaPassword.value;
	if(/^[a-zA-Z0-9]{8,30}$/.test(pw) && /^[0-9]$/.test(pw) &&
/^[A-Z]$/.test(pw)){
		errors +="- OK";
	}else{
		errors +="- \"Nuova password\" deve essere tra le 8 e le 30
battute,\n contenere almeno un numero, una lettera maiscola e una
minuscola\n";
	}
	if(errors){
		alert(errors);
	}
}
</script>
<body>
<form name="form1" id="form1" method="post" action="">
  <input name="NuovaPassword" type="text" id="NuovaPassword" />
  <input type="button" name="Submit" value="Pulsante"
onClick="CheckForm();" />
</form>
</body>
</html>

 minuscola\n";
non vedo "1 minuscola sopra", manca il [a-z]+
anche quell'inizio ^ e fine $ lo toglierei per le verifiche singole.
fai un po' di prove ...
-- 
"Non sai che ci vuol scienza
 ci vuol costanza
 ad invecchiare senza maturità"
									    F.G.

 minuscola\n";
La tua richiesta originale era:
"almeno 8 battute carattere, almeno un numero, almeno una maiuscola."
Sembro la Carta ti ha scritto le regexp da utilizzare per quella casistica; è
ovvio che se vari le richieste variano anche le regexp da utilizzare.
-- 
"E' un vero peccato che tutte le persone che sanno come far funzionare 
il Paese siano troppo occupate a guidare taxi o a tagliare capelli."
(George Burns)

 password sia composta solo di alfanumerici e di almeno 8 caratteri.
sě, ma č errato per /[A-Z]/
-- 
"Affacciati affacciati benedici, guardaci
 guardaci...guardaci!
 Tanto sono quasi duemila anni che stai a guardare!"
									    E.B.

 password sia composta solo di alfanumerici e di almeno 8 caratteri.
Oggi mi sà che è la giornata nazionale del non capirci o dello spiegarsi male.
:) 
Con "verifiche singole" Cristiano si stava riferendo al check su [A-Z] e
[0-9], del codice postato da Alen; mentre te comprensibilmente ti stavi
riferendo all'unica regexp che avevi scritto con i caratteri di match ^ e $,
pensando che anche Cristiano si rifesse ad essa... Purtroppo Alen si è preso
la briga di aggiungerli in tutte le regexp che gli hai scritto... :)


Ciao e grazie a tutti....
if(/^[a-zA-Z0-9]{8,30}$/&&/[a-z]/&&/[A-Z]/&&/[0-9]/.test(pw)){
ho provato questa stringa ma me la fa passare....
-fsfdfasfasdfasdfasf4-
il che non dovrebbe perchè è si + lunga di 8 battute, c'è almeno una
minuscola, c'è almeno un numero ma non una Maiuscola.
Ho letto che co sono dei problemi con le -regexp- con JS...forse è per
questo.
Ciao e grazie

 questo.
ah sì? e dove? io le uso da un decennio ...
-- 
"Ho smesso di fumare.
 Vivrò una settimana di più.
 E in quella settimana pioverà a dirotto"
									    W.A.

no i trattini erano solo pe risolarti la stringa....
if ( (/^[a-zA-Z0-9]{8,30}$/).test(pw) && (/a-z/).test(pw) &&
(/A-Z/).test(pw)  && (/0-9/).test(pw) ){
vs
alenalen1A
Non la trova dice sempre che è errata.
Io ci rinuncio...

non è che voglio rinunziare...ma dopo tutti questi post forse ho perso
un po' il filo.
Ora l'ho riscritta secondo le tue indicazioni
if ( (/^[a-zA-Z0-9]{8,30}$/).test(pw) && (/^[a-z]$/).test(pw) &&
(/^[A-Z]$/).test(pw)  && (/^[0-9]$/).test(pw) ){
e non mi funziona con una stringa come
1234567ddA
Scusa se ancora ho cannato la sintassi che mi suggerisci

 Ora l'ho riscritta secondo le tue indicazioni
non mi sembra proprio ... scusa sai, ma dovresti quantomeno leggere le
risposte che ti si danno, es. "anche quell'inizio ^ e fine $ lo toglierei
per le verifiche singole" e seguenti.


Ci sono riuscito!!
o meglio ci siete riusciti....
------
if ( (/[a-zA-Z0-9]{8,30}/).test(pw) && (/[a-z]{1,}/).test(pw) &&
(/[A-Z]{1,}/).test(pw)  && (/[0-9]{1,}/).test(pw) ){
Grazie per la pazienza...