Ankündigung

Einklappen
Keine Ankündigung bisher.

preg_match-frage

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • preg_match-frage

    hi,

    und zwar folgendes problem ich möchte einen usernamen unter anderem auf verwendung bestimmter zeichen kontrollieren, nun hab ich mal folgenden ausdruck

    Code:
      preg_match("/[^a-zA-Z0-9]/",$username)
    dieser garantiert, daß nur buchstaben und zahlen verwendet werden

    nun mein problem ich möchte diese zeichen !@_-*~$& ebenfalls erlauben und trotzdem den rest der sonderzeichen wie '"+`)]... usw. ausschließen

    hat jemand eine ahnung wie dann meine preg_match-funktion aussehen müsste?

    vielen dank schonmal an alle antwortenden :wink:

  • #2
    öhm.. ich hab die funktion jetzt noch nie benutzt, aber rein vom logischen her würde ich sagen:

    Code:
    preg_match("/[^a-zA-Z0-9!@_-*~$&]/",$username)
    da a-z, A-Z und 0-9 ebenfalls einfach dort in den klammern stehen... teste mal obs funktioniert

    Kommentar


    • #3
      Zitat von Verion
      Code:
      preg_match("/[^a-zA-Z0-9!@_-*~$&]/",$username)
      da a-z, A-Z und 0-9 ebenfalls einfach dort in den klammern stehen... teste mal obs funktioniert
      Richtig, allerdings musst du auf jeden Fall noch das Minuszeichen auskommentieren. Außerdem würde ich die Funktion lieber andersherum benutzen: ein Benutzername ist dann gültig, wenn den Regex matcht und nicht wenn er nicht matcht. Also so:

      Code:
      preg_match('/^[a-zA-Z0-9!@_\-*~$&]{3,}$/',trim($_POST[benutzername]),$matches);
      $benutzername = $matches[0];
      KMAssS

      Kommentar


      • #4
        Re: preg_match-frage

        Zitat von unknownsoul
        nun hab ich mal folgenden ausdruck

        Code:
          preg_match("/[^a-zA-Z0-9]/",$username)
        dieser garantiert, daß nur buchstaben und zahlen verwendet werden
        Meinst Du nicht, daß es unklug ist, wenn Du die Zeichenklasse negierst?

        Mehr Sinn machte
        Code:
        if (preg_match("/^[a-zA-Z0-9]+$/", $username)) { #OK
        nun mein problem ich möchte diese zeichen !@_-*~$& ebenfalls erlauben und trotzdem den rest der sonderzeichen wie '"+`)]... usw. ausschließen
        Lies Dir erst mal das durch
        http://de2.php.net/manual/de/pcre.pattern.syntax.php
        damit Dir klar wird, welche Zeichen Du escapen mußt. Da es sich wohl um Usernamen handelt, rate ich Dir davon ab, die folgenden Zeichen in Namen zuzulassen:
        Code:
        * $ & ~
        Auch wenn ich selber mit den PCRE so meine Sorgen habe, bin ich trotzdem nicht der Meinung, daß Deine Frage die Frage eines Profis wäre.

        ->moved to Anfänger Forum

        Kommentar


        • #5
          danke erstmal für alle antworten.
          ja sicher nicht unbedingt die frage eines profis, aber einfach ist diese funktion weisgott nicht zu handeln...

          naja und die zeichen in den usernamen soll es schon geben, denkt man an clan-schreibweisen wie "Ma$$!v" oder sowas

          Kommentar


          • #6
            Zitat von unknownsoul
            naja und die zeichen in den usernamen soll es schon geben, denkt man an clan-schreibweisen wie "Ma$$!v" oder sowas
            Dann denke bitte auch daran, daß Du solche Zeichenketten dann nie in "" einpackst, weil es sonst Parserfehler gibt.

            Kommentar


            • #7
              ok danke für den hinweis meikel

              Kommentar


              • #8
                Um die Funktionalität von regulären Ausdrücken zu testen, hat mir das folgende Script schon oft geholfen, auch wenn es nicht perfekt ist:
                Code:
                <?php
                  	if (isset($_POST['go']))
                  	{
                  	    @import_request_variables('cgp');
                  	    $regex = stripslashes($regex);
                         $text = trim($text);
                  	    if ($funkt($regex, $text, $found))
                  	    {
                  	        echo "&Uuml;bereinstimmung gefunden
                ";
                  	        for ($i = 0;$i < count($found);$i ++)
                  	        {
                  	            echo "Muster $i: $found[$i]
                ";
                  	        }
                  	    }
                  	    else
                  	    {
                  			echo "Keine &Uuml;bereinstimmung'
                ";
                  	    }
                  	    echo "<hr />";
                  	}
                  	else
                  	{
                  	    $regex = '';
                  	    $text = '';
                  	    $funkt = 'preg_match';
                  	}
                  	$f = array('preg_match', 'ereg', 'eregi');
                	  echo "<form  method='POST'><table cellspacing=3>\n";
                	  echo "<tr><td>Regex:<td><input name='regex' value='$regex' size='60'/></tr>\n";
                	  echo "<tr><td valign='top'>Text:<td><textarea name='text' value='$text'
                	      cols='45' rows='7'>$text</textarea></tr>\n";
                	  for ($i = 0;$i < 3;$i ++)
                	  {
                		  if ($funkt == $f[$i]) $chk = ' checked';
                		  else $chk = '';
                		  echo "<tr><td><td><input type='radio' name='funkt' value='$f[$i]'
                	      	    $chk>$f[$i]</input></tr>\n";
                	  }
                	  echo "<tr><td><td><input type='submit' name='go' value='Testen'/><tr>";
                     echo "</table></form>\n";
                
                ?>
                Wenn du dort unter Regex z.B"/^[\w!&*@~$-]+$/" eingibst, kannst du beliebige Usernamen testen.
                Gruss
                L

                Kommentar

                Lädt...
                X