PHP regulären Ausdruck Spiel alphanumerische Zeichenfolgen mit einigen (aber nicht allen) Interpunktion

StackOverflow https://stackoverflow.com/questions/4468442

Frage

Ich habe einen regulären Ausdruck in PHP geschrieben Strings zu ermöglichen, die alphanumerischen mit jeder Interpunktion mit Ausnahme von sind & oder @ . Im Grunde brauchen, ich etwas auf einer amerikanischen Standard-Tastatur mit Ausnahme der zwei Zeichen zu ermöglichen. Es dauerte eine Weile, mit dem folgenden regulären Ausdruck zu kommen, was zu tun zu sein scheint, was ich brauche:

if (ereg("[^]A-Za-z0-9\[!\"#$%'()*+,./:;<=>?^_`{|}~\-]", $test_string)) {
  // error message goes here
}

Was mich zu meiner Frage bringt ... gibt es eine bessere, einfachere oder effizientere Art und Weise?

War es hilfreich?

Lösung

Hier finden Sie aktuelle Zeichenbereiche:

@[!-%'-?A-~]+@

Dies wird die Zeichen & (\0x26) und @ (0x40) auszuschließen. Mit Blick auf eine ASCII Tabelle , können Sie sehen, wie das funktioniert: Das Ausrufezeichen ist das erste Zeichen im ASCII-Zeichensatz, das nicht Leerzeichen ist. Es wird dann alles bis zum und einschließlich dem % Charakter entspricht, die unmittelbar auf den Ampersand vorangeht. Dann wird der nächste Bereich, bis der @ Charakter, der zwischen ? und A liegt. Danach werden wir alles bis zum Ende des Standard-ASCII-Zeichensatzes entsprechen, die ein ~ ist.

Update

Um die Dinge besser lesbar, könnte man auch bedenken Sie in zwei Schritten vor: Zunächst Filter etwas außerhalb des Standard-ASCII-Bereich.

@[!-~]+@

In einem zweiten Schritt, filtern Sie unerwünschte Zeichen oder einfach eine str_pos auf die Charaktere tun.

Am Ende können Sie es vergleichen mit dem, was Sie begonnen haben, um zu sehen, ob es irgendwelche unerwünschten Zeichen enthalten sind.

Stattdessen könnten Sie auch einen regulären Ausdruck, wie dies für den zweiten Schritt verwendet werden. /[^@&]+/

Die Schritte sind austauschbar und dabei eine str_pos auf @ oder & als einen ersten Schritt, schlechte Zeichen zu identifizieren, weise eine bessere Leistung sein kann.

Andere Tipps

Was folgt aus:

[^&@]

mit preg_match

$str = 'a';
var_dump(preg_match('~^[^&@]+$~', $str)); // true

$str = '&';
var_dump(preg_match('~^[^&@]+$~', $str)); // false

$str = '!';
var_dump(preg_match('~^[^&@]+$~', $str)); // true

Ich denke eher, als Prüfung für alle die alphanumerischen Zeichen, die Sie einfach für @ überprüfen und & und verwenden Sie einen nicht?

$reg = '/@|&/';
if(!preg_match($reg, "YOUR STRING CAN GO HERE")){
// your code goes here
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top