0
votes

php: vérifie si une variable a / manque de caractères particuliers

J'ai en fait deux questions, mais c'est presque la même chose.

no1, je veux utiliser PHP pour vérifier si une variable contient quelque chose qui n'est pas une barre oblique ou un nombre, je suis conscient que je peux utiliser strpos() pour cela mais si je fais quelque chose comme

$chars = "$""#""/""*";
if ($myvariable contains any of the letters in $char){
    //do something
}

le code ci-dessus d'abord si l'instruction vérifie si la variable contient une barre oblique puis le prochain vérifie si la variable contient des lettres, mais si quelqu'un tape quelque chose comme 'asdfgfds2345 /' comme date de naissance, il passera car la chaîne contient une barre oblique et nombres mais j'ai ce que mon script PHP pour faire quelque chose comme ça

if (strpos($my_variable, "/")) {
    //redirect
} else {
    if (strpos($my_variable, "?")) {
        //redirect
    } else {
        if (strpos($my_variable, "$")) {
            //redirect
        } else {
            //do something
        }
    }
}

question suivante: je veux utiliser PHP pour vérifier si une variable contient quelque chose qui n'est pas une lettre minuscule , un trait de soulignement ou un trait d'union, je suis également conscient que je peux utiliser strpos() pour cela mais si je ne peux pas continuer à faire quelque chose comme ça quelque chose comme ça

if(/*my_variable contains letters,special characters and any other thing that is not a number or a forward slash*/){
 do something}

si j'essaie de faire ce qui précède, il me faudra beaucoup de temps pour terminer cette page, alors y a-t-il un moyen de le faire

if (strpos($my_variable, "/")) {
    if (1 === preg_match('~[0-9]~', $string)) {
        //do something
    }
}

Je sais que le code ci-dessus est erroné à tous égards, mais j'essaie juste de vous montrer ce que je veux accomplir

Merci d'avance


6 commentaires

Est-ce que cela répond à votre question? Comment vérifier si une chaîne ne contient pas une phrase spécifique?


@NicoHaase ma question est différente


Des progrès / mises à jour ici?


@MarkusAO, dans quel aspect


Dans l'aspect de savoir si les réponses ont résolu le problème. :)


@MarkusAO oui, veuillez consulter ma dernière question (il s'agit d'ajax) la voici


3 Réponses :


0
votes

Vous pouvez essayer avec des expressions régulières comme celle-ci:

if (preg_match('#[0-9/]#', $myvariable)) {
    //Do something
}


1 commentaires

Cela renverrait true pour ///112124124/14444///40124whatever///FOOBAR%^&/22 , par exemple, également pour Donald2Duck et foo/bar , car les chaînes contiennent soit un chiffre, soit une barre oblique. Ancrez avec ^ et $ au début et à la fin du sujet.



0
votes

Correspondance avec la date de naissance:

Si vous souhaitez vérifier le format de la date de naissance (en supposant [D]D/[M]M/YY[YY] , valeurs possibles à un chiffre pour le jour et le mois), vous pouvez le faire comme suit:

if (preg_match('~[^a-z_-]~', $var)) {
    // matches something other than a-z, _ and -
} else {
    // $var only has acceptable characters
}

Ici, nous utilisons les ancres ^ et $ (pour ^ début et $ fin du sujet) pour affirmer que le sujet $var doit être uniquement ceci (plutôt que de l'inclure): [D]D/[M]M/YY[YY] , ou 1-2 chiffres, barre oblique, 1-2 chiffres, barre oblique, 2 ou 4 chiffres (notez la correspondance (\d{2})? facultative).

On pourrait encore régler l'expression régulière pour qu'elle corresponde également aux plages de nombres acceptables, mais j'espère que cela fera l'affaire pour le moment. Vérifiez plutôt les plages après le traitement; vous voudrez probablement le convertir en horodatage (éventuellement avec strtotime ) et / ou en date / strtotime SQL pour une utilisation ultérieure dans tous les cas.

Une autre chose pratique que vous pouvez faire est de capturer immédiatement les composants de la date. Dans l'exemple suivant, nous utilisons des groupes de capture nommés pour plus de clarté:

array(8) {
    [0] · string(10) "20/02/1980" // this is the complete subject
    ["day"] · string(2) "20"
    [1] · string(2) "20"
    ["month"] · string(2) "02"
    [2] · string(2) "02"
    ["year"] · string(4) "1980"
    [3] · string(4) "1980"
    [4] · string(2) "80" // this will only appear for 4-digit years
}

Remarquez comment la variable $date , contenant les correspondances, continue à partir de la ligne de contrôle conditionnel. Vous pouvez valider et analyser en un seul geste, yay! Résultats (en supposant une entrée du 20/02/1980) en:

if (preg_match('~^(?<day>\d{1,2})/(?<month>\d{1,2})/(?<year>\d{2}(\d{2})?)$~', $var, $date)) {
    var_dump($date); // see what we captured.
} else {
    // nothing to see here, except a protest.
}

(Non-) correspondant à tous les caractères:

"Je veux utiliser PHP pour vérifier si une variable contient quelque chose qui n'est pas une lettre minuscule, un trait de soulignement ou un trait d'union" . C'est aussi simple que ça:

// This would match for any numbers:
if (preg_match('~^\d{1,2}/\d{1,2}/\d{2}(\d{2})?$~', $var)) {
    // proceed with valid date
} else {
    // protest much
}

Ici, l'opérateur ^ annule la plage de caractères (uniquement à l'intérieur de [] , sinon c'est le début du sujet). Si vous voulez faire une vérification positive (par exemple has #, &, X), simplement preg_match('~[#&X]~', $var) . Passer un peu de temps à comprendre les expressions régulières est un temps bien investi. Je dérive encore souvent vers RegularExpressions.Info pour rafraîchir la mémoire ou étudier comment implémenter des expressions plus complexes, mais il existe également de nombreuses autres ressources. Bonne correspondance,


0 commentaires

0
votes

C'est un bon cas d'utilisation pour utiliser simplement strstr()

strstr - Recherche la première occurrence d'une chaîne

if (!strstr($a, '-')) {
  // No hyphen in $a
}


0 commentaires