webentwicklung-frage-antwort-db.com.de

PHP preg_match - Erlaubt nur alphanumerische Zeichenfolgen und - _ Zeichen

Ich brauche die Regex, um zu überprüfen, ob eine Zeichenfolge nur Zahlen, Buchstaben, Bindestriche oder Unterstrich enthält

$string1 = "This is a string*";
$string2 = "this_is-a-string";

if(preg_match('******', $string1){
   echo "String 1 not acceptable acceptable";
   // String2 acceptable
}
25
Lee Price

Code:

if(preg_match('/[^a-z_\-0-9]/i', $string))
{
  echo "not valid string";
}

Erläuterung:

  • [] => Zeichenklassendefinition
  • ^ => negiere die Klasse
  • a-z => Zeichen von 'a' bis 'z'
  • _ => unterstreichen
  • - => Bindestrich '-' (Sie müssen dem entkommen)
  • 0-9 => Zahlen (von null bis neun)

Der Modifikator "i" am Ende des Regex bedeutet "Groß- und Kleinschreibung beachten". Wenn Sie dies nicht tun, müssen Sie die Großbuchstaben im Code hinzufügen, bevor Sie A-Z ausführen

81
SERPRO
if(!preg_match('/^[\w-]+$/', $string1)) {
   echo "String 1 not acceptable acceptable";
   // String2 acceptable
}
17
matino

\w\- ist wahrscheinlich der beste, aber hier nur eine andere Alternative
Verwenden Sie [:alnum:]

if(!preg_match("/[^[:alnum:]\-_]/",$str)) echo "valid";

demo1 | demo2

2
Thielicious

Hier ist ein Äquivalent der akzeptierten Antwort für die UTF-8-Welt.

if (!preg_match('/^[\p{L}\p{N}_-]+$/u', $string)){
  //Disallowed Character In $string
}

Erläuterung:

  • [] => Zeichenklassendefinition
  • p {L} => entspricht jeder Art von Buchstaben aus einer beliebigen Sprache
  • p {N} => entspricht jeder Art von numerischem Zeichen
  • _- => entspricht Unterstrich und Bindestrich
  • + => Quantifier - Übereinstimmungen zwischen einer und beliebig vielen Zeiten (gierig) 
  • / u => Unicode-Modifizierer. Musterzeichenfolgen werden als UTF-16 behandelt. Außerdem bewirkt , Dass Escape-Sequenzen zu Unicode-Zeichen passen

Wenn der Bindestrich das letzte Zeichen in der Klassendefinition ist, muss er nicht mit einem Escapezeichen versehen werden. Wenn der Bindestrich an anderer Stelle in der Klassendefinition angezeigt wird, muss er mit Escapezeichen versehen werden , da er als Bereichszeichen und nicht als Bindestrich angesehen wird.

2
Epiphany

Hier ist eine funky Nicht-Regex-Methode, die str_Word_count () verwendet:

if($string===str_Word_count($string,1,'-_0...9')[0]){
//                                     ^^^^^^^--- characters to allow, see documentation 
    echo "pass";
}else{
    echo "fail";
}

Sehen Sie sich den Demo Link an, wo ich zeige, wie verschiedene Eingaben zu unterschiedlichen Ausgangsarrays führen.

0
mickmackusa