espressione regolare per valore null

frenkytribe

Utente Attivo
17 Gen 2013
87
0
0
Ciao a tutti,
ho una pagina che effettua una query sul db, dove la clausola WHERE la prendo tramite una variabile GET, quindi diventa vulnerabile.
Questa variabile get chiamate $_GET[letter] può contenere solo lettere maiuscolo dalla A alla Z ma può essere anche vuota.

Intanto prima di eseguire la query controllo che la stringa sia <=1 quindi o 0 o 1, e se lo lasciassi così funzionerebbe, però per essere più preciso volevo mettere anche una funzione che controlla quel valore, cioè dalla A alla Z e il valore nullo (o vuoto). Che voi sappiate esiste un modo per farlo utilizzando una funzione del genere?
PHP:
is_char_or_null($chr){
    return ereg("[A-Z]",$chr); 
}
Ovviamente potrei fare un tipo di controllo diverso, tipo
PHP:
if(strlen($lettera)==0 || (strlen($lettera)==1 && is_char($lettera))){
ma mi piacerebbe comunque saperlo.
 
Ultima modifica:
PHP:
function is_char_or_null($chr)
{
    if ( is_null($chr) ) return true;
    
    return preg_match("/[A-Z]/",$chr); 
}
 
ciao
intanto NON usare ereg è deprecata ed è facile che con le ultime versioni ti dia un varning.
prova questo (immagino che quella che tua hai scritto sia una function?)
PHP:
<?php
function is_char_or_null($chr){
    $pattern="/[A-Z]{0,}/";
	/*numeri tra{}=> così minimo 0(vuoto) a infiniti caratteri 
	{3,5} da un minimo di 3 ad un massimo di 8 caratteri
	*/
	return preg_match($pattern,$chr); //return stringa se OK, false se KO
}  
?>
al massimo non funziona
 
Grazie, sì è una funzione, ho fatto come hai scritto, però se provo con i simboli ? , ; . = ecc funziona lo stesso. Deve funzionare solo dalla A alla Z o vuoto
 
provato questo?

PHP:
function is_char_or_null($chr)
{
    if ( empty($chr) ) return true;
    
    return preg_match("/[A-Z]/",$chr); 
}
 
Sisi, il fatto che deve funzionare anche se $lettera è vuoto ci siamo, ma è come se non funzionasse l' A-Z su alcuni caratteri speciali, tipo ? - , ; % e altri
Cioè se scrivo sito?lettera= funziona, sito?lettera=G funziona, sito?lettera=% funziona anche, ma non dovrebbe.
 
hai ragione, infatti i segni di interputazione appartengono all'insieme a-z... fai così allora

PHP:
function is_char_or_null($chr)
 {
 	if ( empty($chr) ) return true;
 
 	return preg_match("/^\pL+$/u",$chr);
 }
 
prova così
PHP:
<?php
function is_char_or_null($chr){
    if ( empty($chr) ) return true;
    return preg_match("/^[A-Z]{1,}$/",$chr); 
}
$stringa=array("AABBKKZZ","aabbKKZZ","","AA..?KKZZ",NULL);
foreach($stringa as $val){
	if(is_char_or_null($val)){
		echo "la stringa $val è giusta o vuota<br />";
	}else{
		echo "la stringa $val è sbagliata<br />";
	}
}
?>
output
a stringa AABBKKZZ è giusta o vuota
la stringa aabbKKZZ è sbagliata
la stringa è giusta o vuota
la stringa AA..?KKZZ è sbagliata
la stringa è giusta o vuota
 

Discussioni simili