Buonasera,
qualcuno conosce uan classe, un trick o una funzione tale per cui controllando una stringa io possa dire 'si, è una (potenziale ?) regexp valida' ?
in parole povere, tramite regexp validare una regexp string :-)
grazie!
Buonasera,
qualcuno conosce uan classe, un trick o una funzione tale per cui controllando una stringa io possa dire 'si, è una (potenziale ?) regexp valida' ?
in parole povere, tramite regexp validare una regexp string :-)
grazie!
Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle
il mio profilo su PHPClasses e il mio blog laboweb
Se trovi la soluzione, farebbe molto comodo anche a me.
Mi perdo ogni volta che devo scriverne una!
Intendi qualcosa del genere?
http://www.webmasterpoint.org/php/tu...javascript.asp
$stringa = 'mio regexp sbagliato';
if(FALSE === @preg_match($stringa,'')){
//$stringa non contiene una regex valida
}else{
// e' valida
}
@KIller & Samleo:
no mi serve un tester per vedere se la mia regexp da risultati e come, ma solo per verificare se la stringa che uso come pattern sia valida oppure no, quindi a livello sintattico
bubi questa potrebbe essere una soluzione che avevo vagliato anche io, solo che mi interessava, in base all asituazione sapere se deveo ure preg_match o substr....Originariamente inviato da bubi1
$stringa = 'mio regexp sbagliato';
if(FALSE === @preg_match($stringa,'')){
//$stringa non contiene una regex valida
}else{
// e' valida
}
ti faccio un esempio:
questa è la mia situazione: se faccio come dici te ho un calo di performance, in quanto dovrei SEMPRE eseguire una regexp e nel peggiore dei casi 2 regexpCodice PHP:
function findStr($str='',$pattern=''){
if(isRegexp($pattern)){
preg_match($pattern,$str,$out);
return count($out[0]);
}
else{
$check=strpos($str,$pattern);
return ( $check === false)?0:$check;
}
}
function isRegexp($patt){
...
return $isIt; //true || false
}
devo quindi evitare il di farne una ed eseguire solo quella necessaria
Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle
il mio profilo su PHPClasses e il mio blog laboweb
hai provao con i vari validatori e tool on line ce ne sono diversi,
alcuni molto completi e pure multi linguaggio
http://regexpal.com/
http://rexv.org/
http://ryanswanson.com/regexp/#start
http://www.spaweditor.com/scripts/regex/index.php
![]()
stefano
questo mi funziona per esempio....
$pattern='/^(\/|#).+(\/|#)u?s?m?i?x?$/Usi';
preg_match($pattern,'ciao',$out);
print_r($out);
preg_match($pattern,'/[0-9]\{\}?/Um',$out);
print_r($out);
bruttina da vedere, lo sò.. però funziona :-)
Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle
il mio profilo su PHPClasses e il mio blog laboweb
dottwatson, aparte che un match vs un testo vuoto ha tempi di esecuzione trascurabili, puoi fare diversamente:
$stringa = ...
$testo =...
$pregris = @preg_match($stringa,$testo,$risultati);
if($pregris === false){
//reg non valida
return strpos..
}elseif($pregris >0){
//reg valida, e ci sono dei match
return $risultati..
}else{
//reg valida ma niente match
}
in questo modo nel migliore dei casi fai un unico match, nel peggiore fai un match+strpos.
Considera una cosa: nemmeno php stesso controlla la validita' delle regex. Le passa direttamente al pcre e legge il risultato.
Il motore pcre invece funziona grossomodo cosi':
1. Compila regex
2. Se 1 false > return errore else
3. Esegue il match/replace/filter.. etc
4. Return risultato di 3
Tornando al caso di sopra, quello peggiore (match+strpos), anche se tu fai un preg_match con una regexp sbagliata, al livello basso il match non viene veramente fatto. Pcre fallisce la compilazione e restituisce l'errore a php.
Quindi puoi considerare le fasi 1-2 del pcre virtualmente come tua funzione isRegexp.
Considera anche che se tu scrivessi una funzione che facesse il parsing e tenesse in considerazione TUTTA la sintassi regexp, questa non sarebbe per niente piu' veloce del motore di compilazione di pcre.
ma cosi tu controlli solo che ci siano i delimitatori+parametri, e sempre con un operazione regex extraOriginariamente inviato da dottwatson
$pattern='/^(\/|#).+(\/|#)u?s?m?i?x?$/Usi';
preg_match($pattern,'ciao',$out);
/ciao/ -> ok
/cia(o/ ->ok, ma non e' per niente una regex valida
si forse hai ragione :-)
ti ringrazio![]()
Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle
il mio profilo su PHPClasses e il mio blog laboweb