Frage

Die Werte werden in diesem Format 123-123-123-12345 erfolgen, für die ich möchte, dass die Preg_Match funktioniert. Kannst du mit dieser Regex etwas falsch sehen?

foreach($elem as $key=>$value) {

   // Have tried this With and without the + before the $ as well
   if(preg_match("/^[0-9]{3}\-[0-9]{3}\-[0-9]{3}\-[0-9]{5}+$/", $value)) {
      echo "Yeah match Elm: ".$value."<br />"; 
   } else {
      echo "Boo Hoo Elm: '".$value."'<br />";  
   }
}

habe es auch versucht

/^\d{3}\-\d{3}\-\d{3}\-\d{5}+$/

            //With and without the + before the $

Sie alle scheitern mit Boo hoo; ((

BEARBEITEN:

var_dump($elem)

array(3) { [0]=>  string(1) "c" [1]=>  string(0) "" [2]=>  string(36) "123-123-123-12345" }
War es hilfreich?

Lösung

Versuchen Sie diesen Code:

$value = '123-123-123-12345';

if(preg_match("/^[0-9]{3}\-[0-9]{3}\-[0-9]{3}\-[0-9]{5}+$/", $value)) {
    echo "Yeah match Elm: ".$value."<br />"; 
} else {
    echo "Boo Hoo Elm: '".$value."'<br />";  
}

(Ich bin mir nicht sicher \ sind nützlich - aber sie scheinen in diesem speziellen Fall keine Probleme zu verursachen)

Ich bekomme :

Yeah match Elm: 123-123-123-12345

Und damit:

$value = '123-123-1a-123';

Ich bekomme :

Boo Hoo Elm: '123-123-1a-123'

Die Regex scheint tatsächlich für mich zu funktionieren?


Könnten Sie etwas mehr Code bereitstellen? Oder vielleicht verwenden:

var_dump($elem);

Könnte nützlich sein, um zu überprüfen, ob es wirklich das enthält, was Sie erwarten?

Andere Tipps

Könnten Sie bitte ein Testarray mit den Daten angeben (serialisiert wäre es am besten), da ich dieses Verhalten nicht reproduzieren kann.

$elem = array ('123-123-123-12345');

foreach($elem as $key=>$value) {

   // Have tried this With and without the + before the $ as well
   if(preg_match("/^[0-9]{3}\-[0-9]{3}\-[0-9]{3}\-[0-9]{5}+$/", $value)) {
      echo "Yeah match Elm: ".$value."<br />"; 
   } else {
      echo "Boo Hoo Elm: '".$value."'<br />";  
   }
}

Ergebnis: Ja Match ELM: 123-123-123-12345

Auch die Backslashes werden im regulären Ausdruck nicht benötigt. Die Striche müssen nur in [] Gruppen entkommen werden, wenn sie nicht der erste Charakter sind ([-az] übereinstimmen "- oder AZ", aber [Az] würde "a oder oder z" übereinstimmen.

--- BEARBEITEN ---

Ok, das einzige, was ich nicht verstehen kann, ist, welche Codierung Sie verwenden?

string(36) "123-123-123-12345"

36 Bytes ... das nächste, was ich bekam, ist UTF-16, aber nur 34 Bytes. Was ist die Codierung, die Sie verwenden?

Sie können auch versuchen, die Zeichenfolge in UTF-8 zu konvertieren, bevor Sie mit dem Regexp übereinstimmen. (Versuchen Sie auch, den Parameter 'u' im Regexp: '/Somreg d/u' zu verwenden, nachdem sie auf UTF-8 konvertiert wurde)

Verwenden Sie doppelte Backslashes.

Ähmmmmm ....

In Ihrer Bearbeitung sprechen Sie darüber $ Array und in Ihrer Schleife um $ elem.

Könnte das das Problem sein?

Bearbeiten: Übrigens gibt es etwas Seltsames mit Ihren Daten, ich zähle nur 17 Zeichen. Warum gibt es also eine Zeichenfolge (36)?

Replizieren nicht. Ihr Code funktioniert gut, wenn ich ihn in eine Datei einfügt.

Da dein var_dump() zeigt, dass Ihre Zielzeichenfolge 35 Bytes für eine 15-Charakter-Zeichenfolge beträgt. Es scheint jedoch, als hätten Sie Codierungsprobleme. Was passiert, wenn Sie die Regex dagegen laufen lassen utf8_decode($value) Anstatt von $value?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top