preg_match

Fragen zum Thema HTML, JavaScript, PHP
Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

preg_match

Beitrag von naums » Do Mär 18, 2010 9:55 pm

Ich will mithilfe von preg_match eine Internetadresse darauf prüfen lassen ob sie "http://" am anfang hat, oder nicht.
Ich bin soweit gekommen:

Code: Alles auswählen

  if (preg_match('@^(?:http://)?([^/]+)@i', $src, $quelle))
  {
      die("Übereinstimmung");
  }
  else
  {
      die("nichts");
  };
Der Code gibt IMMER "Übereinstimmung" aus. $src hat folgenden Inhalt: http://luckybogey.files.wordpress.com/2 ... bilde.jpeg Das ist nur ein beispielbild und wird nicht auf meine Seite kommen. Wo hab ich nen Denkfehler, was mach ich falsch, wie müsste das richtig lauten, und HÄ?
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: preg_match

Beitrag von Xin » Do Mär 18, 2010 10:58 pm

Was spricht die schnellere Alternative

Code: Alles auswählen

if( strpos( "http://", $quelle ) == 0 )
{
  die( "Yepp" );
}
else
{
  die( "Nopes" );
}
(Code nicht getestet)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: preg_match

Beitrag von Kerli » Do Mär 18, 2010 11:05 pm

Du hast den Regex-Ausdruck scheinbar von http://php.net/manual/de/function.preg-match.php. Am Besten lies zuerst einmal genau was dort steht, was dieser Ausdruck den tut ;)

Am Einfachsten ist es wenn du parse_url verwendest und schaust ob 'scheme' gesetzt ist. Oder du schaust einfach ob die ersten Zeichen deiner Url http:// sind. Dazu brauchst du eigentlich keine regulären Ausdrücke.

/* edit: Siehe Xin :) */
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: preg_match

Beitrag von naums » Fr Mär 19, 2010 4:05 pm

ihr verunsichert mich: Xin Dein Code hat das Problem dass IMMER "Yepp" rauskommt.. und Kerli: parse_url... muss ich mir mal anschaun.
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: preg_match

Beitrag von Xin » Fr Mär 19, 2010 4:23 pm

naums hat geschrieben:ihr verunsichert mich: Xin Dein Code hat das Problem dass IMMER "Yepp" rauskommt.. und Kerli: parse_url... muss ich mir mal anschaun.
PHP ist auch Schrott... Quelle und http sind vertauscht, also findet er es NIE. Da false aber == 0 ist, gibt er sein okay, WEIL es nicht okay ist.
(Code ist wieder nicht getestet)

Code: Alles auswählen

$result = strpos( $quelle, "http://" );
$result = ($result == 0) && ( result !== FALSE );  // PHP suxx

if( $result )
{
  die( "Yepp" );
}
else
{
  die( "Nopes" );
}
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: preg_match

Beitrag von naums » Fr Mär 19, 2010 4:29 pm

Is PHP zu doof dazu?

Code: Alles auswählen

  $result = strpos( $quelle, "http://" );
  $result = ($result == 0) && ( result !== FALSE );
  
  if($result)
  {
      die( "Yepp" );
  }
  else
  {
      die( "Nopes" );
  }
bringt immer Yepp

und

Code: Alles auswählen

  if(strpos( $quelle, "http://" ))
  {
      die( "Yepp" );
  }
  else
  {
      die( "Nopes" );
  }
bringt immer Nopes.... is doch sinnlos... -.-
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: preg_match

Beitrag von Xin » Fr Mär 19, 2010 4:39 pm

naums hat geschrieben:Is PHP zu doof dazu?
Nein, aber PHP erlaubt alle Fragen, alle Fragen haben auch Antworten und wer blödsinnige Fragen stellt, bekommt bei PHP nicht einen auf den Sack, sondern eine blödsinnige Antwort.

$result = ($result == 0) && ( $result !== FALSE );

Hab's grade ausprobiert: Funktioniert.
Das ist der Scheiß an PHP... der Fehler ist leicht zu übersehen, PHP typisch und führt zu keiner Warnung oder gar einem Fehler, nur zu unerwünschten Ergebnissen, die man im ersten Moment vielleicht nichtmals sieht.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: preg_match

Beitrag von naums » Fr Mär 19, 2010 4:45 pm

hm... jetzt gehts. Ich hab den Fehler ja auch net gesehn.... doofe Sache das.

UPDATE:
folgender Code sollte ja jetzt eig. "http://"+(die URL) in die Variable $quelle schreiben. Tuts nur leide NIE, weder wenn http:// dran steht, noch wenns nicht da steht. Warum net?

Code: Alles auswählen

  $result = strpos( $src, "http://" );
  $result = ($result == 0) && ($result !== FALSE );
  
  if($result)
  {
      $quelle=$src;
  }
  else
  {
      $quelle='http://'.$src;
  };
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: preg_match

Beitrag von Xin » Fr Mär 19, 2010 5:02 pm

naums hat geschrieben:hm... jetzt gehts. Ich hab den Fehler ja auch net gesehn.... doofe Sache das.

UPDATE:
folgender Code sollte ja jetzt eig. "http://"+(die URL) in die Variable $quelle schreiben. Tuts nur leide NIE, weder wenn http:// dran steht, noch wenns nicht da steht. Warum net?
Darauf habe ich keine Antwort, vielleicht wären weiterführende Informationen sinnvoll, z.B. was denn stattdessen in $quelle steht.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: preg_match

Beitrag von naums » Fr Mär 19, 2010 5:40 pm

$src ist die Adresse. In diesem Fall habe ich "wikimedia.org" genommen.
In $quelle sollte also nun "http://wikimedia.org" stehen, da ja das "http://" in $src fehlt, sollte also die if an die richtige Stelle springen.
Stattdessen steht in $quelle nur "wikimedia.org".
.globl truth
truth:
mov r0, #42
mov pc, lr

Antworten