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?
codice:
<?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);
}
?>
Grazie