Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012

    [RegExp] verificare se una regexp è valida

    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

  2. #2
    Se trovi la soluzione, farebbe molto comodo anche a me.

    Mi perdo ogni volta che devo scriverne una!

  3. #3

  4. #4
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    $stringa = 'mio regexp sbagliato';
    if(FALSE === @preg_match($stringa,'')){
    //$stringa non contiene una regex valida
    }else{
    // e' valida
    }

  5. #5
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    @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

    Originariamente inviato da bubi1
    $stringa = 'mio regexp sbagliato';
    if(FALSE === @preg_match($stringa,'')){
    //$stringa non contiene una regex valida
    }else{
    // e' valida
    }
    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....

    ti faccio un esempio:

    Codice 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
        

    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 regexp

    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

  6. #6
    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

  7. #7
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    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

  8. #8
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    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.

  9. #9
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Originariamente inviato da dottwatson

    $pattern='/^(\/|#).+(\/|#)u?s?m?i?x?$/Usi';

    preg_match($pattern,'ciao',$out);
    ma cosi tu controlli solo che ci siano i delimitatori+parametri, e sempre con un operazione regex extra

    /ciao/ -> ok
    /cia(o/ ->ok, ma non e' per niente una regex valida

  10. #10
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.