If you are placing your quoted string within []'s, make sure you also escape the dash (-) character manually.
preg_match("/^[A-Za-z\d" . preg_quote('!@#$%^&*()-_=+\|[]{};:/?.><', '/') . "]{8,32}$/", $password)
The above will try to match the characters ')' through '_' whatever those are. So use the below expression:
preg_match("/^[A-Za-z\d" . preg_quote('!@#$%^&*()_=+\|[]{};:/?.><', '/') . "\-]{8,32}$/", $password)
Yes, I know I can use \w in place of A-Za-z, but I wanted to illustrate my point better :)
preg_quote
(PHP 4, PHP 5)
preg_quote — Maskiert Zeichen regulärer Ausdrücke
Beschreibung
$str
[, string $delimiter = NULL
] )
preg_quote() setzt einen Backslash vor jedes Zeichen von
str, das zur Syntax eines regulären Ausdrucks
gehört. Das ist nützlich, wenn Sie einen Text nach Übereinstimmungen mit
einer zur Laufzeit erzeugten Zeichenkette durchsuchen müssen, die spezielle
RegEx-Zeichen enthalten könnte.
Spezielle Zeichen regulärer Ausdrücke sind: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
Parameter-Liste
-
str -
Die zu durchsuchende Zeichenkette
-
delimiter -
Falls der optionale
delimiterangegeben wurde, wird dieser ebenfalls maskiert. Das ist nützlich, um den Begrenzer zu maskieren, der von den PCRE-Funktionen benötigt wird. Der / ist der am häufigsten verwendete Begrenzer.
Rückgabewerte
Gibt die maskierte Zeichenkette zurück.
Changelog
| Version | Beschreibung |
|---|---|
| 5.3.0 | Das Zeichen - wird nun maskiert. |
Beispiele
Beispiel #1 preg_quote()-Beispiel
<?php
$schluesselwoerter = '$40 für einen G3/400';
$schluesselwoerter = preg_quote($schluesselwoerter, '/');
echo $schluesselwoerter; // liefert \$40 für einen G3\/400
?>
Beispiel #2 Kursivdruck eines Wortes in einem Text
<?php
// In diesem Beispiel wird preg_quote($wort) verwendet, damit die
// Asterisks (*) für den regulären Ausdruck keine spezielle Bedeutung haben.
$text = "Dieses Buch ist *sehr* schwer zu finden.";
$wort = "*sehr*";
$text = preg_replace ("/" . preg_quote($wort) . "/",
"<i>" . $wort . "</i>",
$text);
?>
Anmerkungen
Hinweis: Diese Funktion ist binary safe.
preg_quote
04-Dec-2006 11:03
26-Dec-2003 12:02
Re: adrian holovaty
You must also escape '#' character. Next thing is that there is more then one whitespace character (a space).. Also IMO the name preg_quote_white() won't tell what the new function does so we could rename it. And finally, we should also add $delimiter:
<?php
function preg_xquote($a, $delimiter = null) {
if ($delimiter) {
return preg_replace('/[\s#]/', '\\\0', preg_quote($a, substr("$delimiter", 0, 1)));
} else {
return preg_replace('/[\s#]/', '\\\0', preg_quote($a));
}
}
?>
16-Jul-2003 02:12
Note that if you've used the "x" pattern modifier in your regex, you'll want to make sure you escape any whitespace in your string that you *want* the pattern to match.
A simplistic example:
$phrase = 'a test'; // note the space
$textbody = 'this is a test';
// Does not match:
preg_match('/' . preg_quote($phrase) . '$/x', $textbody);
function preg_quote_white($a) {
$a = preg_quote($a);
$a = str_replace(' ', '\ ', $a);
return $a;
}
// Does match:
preg_match('/' . preg_quote_white($phrase) . '$/x', $textbody);