2010-10-13 14 views
2

J'ai la chaîne suivante.Expression régulière pour chaîne fixe

?page=1&sort=desc&param=5&parm2=25 

Je dois vérifier si l'URL de la chaîne d'entrée est au format strict sauf la valeur de la variable. Comme page =, sort =, param =, param2.

Veuillez suggérer une expression régulière. Merci

+0

Je veux aussi variable dans tableau array ('page' => 1, 'sort' => 'desc', 'param '= 5,' param2 '= 25) – Rahul

+0

Je pense que preg_match fonctionnera mais je veux une expression régulière exacte – Rahul

Répondre

10

Vous devez utiliser parse_str et vérifier si tous les paramètres que vous souhaitez sont définis avec isset. Regex n'est pas le moyen d'aller ici.

0

Si vous vous souciez de l'ordre des paramètres, quelque chose comme ceci:

\?page=[^&]+&sort=[^&]+param=[^&]+param2=[^&]+$ 

Mais Alin Purcaru est juste - utiliser la fonction parse_str déjà écrit à faire

0

Vous pouvez utiliser le REGX suivant/? \ page = [^ &] * sort = [^ &] * param = [^ &] * param2 =/`pour correspondre:

if (preg_match("/\?page=([^&]*)sort=([^&]*)param=([^&]*)param2=([^&]*)/i", $inputstr, $matches)) 
{ 
    echo "Matches:"; 
    print_r($matches);  // matches will contain the params 

} 
else 
    echo "Params nor found, or in wrong order; 
1

mai être ceci:

\?page=\d+&sort=.+&param=\d+&param2=\d+ 

qui se traduit par:

page =followed by any digit repeated 1 or more times

& sort =followed by any character repeated 1 or more times

& param =followed by any digit repeated 1 or more times

& param2 =followed by any digit repeated 1 or more times

Je pense que la suggestion de Alin Purcaru est mieux

EDIT:

(\?|&)(page=[^&]+|sort=[^&]+|param=[^&]+|parm2=[^&]+) 

De cette façon, l'ordre n'a pas d'importance

+0

Oui, mais l'ordre du paramètre peut être changé – Rahul

+0

@Rahul Je ne me souviens pas de vous préciser que dans votre question – ant

+0

@Rahul jetez un oeil à mon édition – ant