• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Regulärer Ausdruck

Gimli

Mitglied
Ich will einen bestimmten Namen bannen lassen. Der Name existiert halt leider in verschiedenen varianten:
bla
b_l_a
B_L_A
bla gedöns

und ich will das halt als regulären Ausdruck formulieren, dass alle gebannt werden, die Bla heißen oder sonst wie. Ich habs schonmal so versucht, aber das geht nicht:
(.*)b+(.{,5})l+(.{,5})a+(.*)

was mache ich falsch?

EDIT: ok geschweifte klammern kann ich nicht verwenden..
 
Zuletzt bearbeitet:
Es ist wohl ziemlich unmöglich, so eine Regel halbwegs umfassend zu definieren, ohne viele Fälle, die eigentlich in Ordnung sind, mit einzuschließen.

Hier ein Beispiel:

PHP:
<?php

// Test => erwartetes Ergebnis (true, wenn als Variation von "bla" gelten soll)
$tests = array(
    'bla' => true,
    'b_l_a' => true,
    'bla x' => true,
    'bla123' => true,
    '123bla' => true,
    
    'abcbla' => false,
    'fooXXXb___l___aXXXoof' => false,
    'blaupause' => false,
    'blaubär' => false,
    'blaa' => false,
    'b0la' => false,
    'annabella' => false,
    'b__x____l____aa' => false,
    'b1a' => false
);

foreach ($tests as $test => $expectedResult) {

    $check = preg_match('/^[^a-z]*?b[^\da-z]*?l[^\da-z]*?a(?:\d|\s|$)/i', $test);

    echo '<p>' . $test . ' => ';

    if ($check == $expectedResult) {
        echo 'PASS';
    } else {
        echo 'FAIL';
    }

    echo '</p>';
}

Edit: Wo ich die Datei im Editor gerade noch mal sehe: Ein paar "Ungreedy"-Modifikatoren ("?") könnten raus. Aber na ja, egal.
 
Zuletzt bearbeitet:
und blasius oder blasengerl oder blasenhans würden ausgeperrt werden
 
Würden sie nicht, aber grundsätzlich hast du da einen Punkt.

mermshaus schrieb:
Es ist wohl ziemlich unmöglich, so eine Regel halbwegs umfassend zu definieren, ohne viele Fälle, die eigentlich in Ordnung sind, mit einzuschließen.

Ein Algorithmus kann nicht wirklich sauber erkennen, ob ein Mensch einen beliebigen String als eine Variation von "bla" erkennen würde. Etwa "b_xxxx_l_xxxx_a" oder so.
 
Zurück
Oben