Buongiorno
Questo codice (funzione) dovrebbe far passare solo parole con solo caratteri alfabetici e solo uno spazio o un undescore, ma non in testa o coda
le parole possoni essere una e non più di due
Che ne pensate? vedete qualche altro caso che può "bucare" la function?
Graziecodice:<?php function verifica_nome($nome){ //corregge nome per spazi o undescore duplicati $corr=preg_replace('/\s\s+/',' ',$nome); $corr=preg_replace('/\_\_+/','_',$corr); $corr=preg_replace('/ _/','_',$corr); $corr=preg_replace('/_ /','_',$corr); $corr=preg_replace('/\ /',' ',$corr); //elimina eventuali spazi in testa o coda $corr=trim($corr); //elimina undescore in testa o coda if(strpos($corr,'_')===0){$corr=substr($corr, 1);} $l=strlen($corr)-1; if(strpos($corr,'_')===$l){$corr=substr($corr, 0,$l);} //verifica nome $errore=""; $num_parole=str_word_count($corr,0,'aèéìòù0123456789'); if($num_parole<1 || $num_parole>2){ $errore.=" troppe parole ";} if(strlen($corr)<4 || strlen($corr)>50){$errore.=" troppo lungo o corto ";}else{ if(!preg_match('/^[a-z _aèéìòù]{4,50}$/i',$corr)){$errore.=" caratteri non ammessi ";}} if($errore==""){ return "$nome => $corr <b>OK</b><br>"; }else{ return "$nome => $corr <b>KO</b>$errore<br>"; } } /* *****fine function***** */ /* esempi nomi da provare */ $str[]="pinco_pallò"; $str[]="sempronio__pallo"; $str[]="asdrubale pallo"; $str[]="sofonisba _pallo"; $str[]="attenzio_ Pallo"; $str[]="onofrio _ trepalle"; $str[]="Pallino"; $str[]="Pallino C"; $str[]="C Pallino"; $str[]="pallonzi_pallo sopra"; $str[]="pal"; $str[]="Alcamir_"; $str[]="_abrakadabra"; $str[]="_abrak7adabra"; $str[]="_nocciolina_"; $str[]=" Noce Moscata "; $str[]=" Eri "; $str[]=" Ori "; $str[]="_____oro_____"; $str[]="Venanzio_C"; $str[]="V_Onofrio"; $str[]="vanesi*o"; $str[]="_H_zozzone_"; /* test */ foreach($str as $nome){ echo verifica_nome($nome); } ?>

Rispondi quotando
