2009-04-01 1 views
3

ich die Nutzer von der Eingabe der folgenden Sonderzeichen in einem Feld einschränken möge:Regulärer Ausdruck einer Reihe von Zeichen zu ermöglichen, und andere nicht zulassen

 
œçşÇŞ 
ğĞščřŠŘŇĚŽĎŤČňěž 
ůŮ 
İťı 
—¿„”*@ 
Newline 
Carriage return 

ein paar mehr werden zu dieser Liste hinzugefügt werden, aber ich werde die komplette eingeschränkte Liste schließlich.

Aber er kann wie äöüÄÖÜÿï usw. zusätzlich zu alphanumerischen Zeichen, übliche Sonderzeichen usw.

Gibt es eine einfache Möglichkeit, einen regulären Ausdruck zu bauen, dies zu tun bestimmte ausländische Zeichen eingeben. Hinzufügen so vieler Zeichen in der Liste nicht erlaubt wie

 
[^œçşÇŞ ğĞščřŠŘŇĚŽĎŤČňěž ůŮ İ ť ı — ¿ „ ” * @]+ 
scheint nicht zu funktionieren.

Und ich habe nicht die vollständige Liste der zulässigen Zeichen. Es würde zu lange dauern, auch wenn ich versuche, es zu bekommen und würde alle Zeichen wie umfassen:

 
~`!#$%^&()[]{};':",. 

zusammen mit bestimmten ausländischen Zeichen.

+0

Welche Sprache? Java/Perl usw.? –

+0

Ich weiß nicht, warum es in Apache Regexp fehlschlägt, aber diese Regex kompiliert gut in Java-integrierten Regex-Paket. Die integrierte Regex-Unterstützung ist viel leistungsfähiger, daher würde ich empfehlen, zu ihr zu wechseln, auch wenn Sie dieses Problem nicht hatten. –

Antwort

1

Sie erwähnen nicht, was "Geschmack" von Regex Sie verwenden. Funktioniert das Folgende?

\A[^œçşÇŞ ğĞščřŠŘŇĚŽĎŤČňěž ůŮ İ ť ı — ¿ „ ” * @]+\z 
1

Ein regulärer Ausdruck kann die falschen Zeichen, z.B .:

[œçşÇŞ ğĞščřŠŘŇĚŽĎŤČňěž ůŮ İ ť ı] 

(Ich habe nicht enthalten alle Zeichen!, Sie bekommen die Idee) entsprechen gebaut werden.

Wenn ein Zeichen übereinstimmt, ist es ein Fehler.

Oder, wenn Sie einen regulären Ausdruck benötigen, die gültig Eingabe übereinstimmt, fügen Sie einfach einen Cursor an der Vorderseite der Klammern wie folgt:

[^œçşÇŞ ğĞščřŠŘŇĚŽĎŤČňěž ůŮ İ ť ı]* 
1

Sie einen regulären Ausdruck für diese verwenden könnte, aber warum Prüfen Sie nicht einfach, ob eines der unzulässigen Zeichen in Ihrer Zeichenfolge mit einer eingebauten Methode enthalten ist. In der .NET-Welt könnten Sie beispielsweise .Contains() verwenden.

Persönlich würde ich eine Liste der zulässigen Zeichen erstellen, dann überprüfen Sie einfach, dass Ihre Zeichenfolge keine Zeichen enthält, die nicht in Ihrer Liste sind. Mit einer Whitelist stellen Sie sicher, dass Sie auch keine "schlechten" Zeichen vergessen haben.

+1

Ich werde dich nicht abstimmen, aber hier ist eine Regex wirklich schlauer, weil (a) sie nach der Kompilierung schneller ist, als nach einer Liste von Charakteren zu suchen und (b) flexibler ist, wenn sich die Anforderungen in Zukunft ändern. –

0

Ein paar mehr werden zu dieser Liste hinzugefügt werden, aber ich werde die vollständige Liste schließlich haben. !

Und ich habe nicht die vollständige Liste der erlaubten Zeichen (Es würde zu lange dauern, auch wenn ich versuche, es zu erhalten und alle Zeichen wie ~ `einschließen würde # $%^&() [] {}; ‚:“ ,. <> alongwith bestimmte ausländische Zeichen)

Sie haben schließlich die Liste der unzulässigen Zeichen und wahrscheinlich nicht die Liste der erlaubten Zeichen Sie entweder die Liste aller erlaubten Zeichen haben muss oder die? Liste aller unzulässigen Zeichen Sonst können Sie nicht sagen, ob die Eingabe legal ist.Wenn Sie eine der Listen haben, haben Sie die zweite implizit, wenn der Zeichensatz bekannt ist. Dann implementiere einfach den kürzeren.

Nur raten, aber wenn Sie Unicode verwenden, wird es wahrscheinlich viel mehr Zeichen geben, die Sie nicht zulassen wollen - denken Sie an all die ausgefallenen Chinees und Japanes Symbole. Also ich denke, Sie sollten wirklich eine Liste von zulässigen Zeichen erstellen und Bereiche wie a-z wo möglich verwenden.

Wenn Sie wirklich die Liste der unzulässigen Zeichen bauen wollen, müssen Sie einen regulären Ausdruck wie bauen müssen [^ œçşÇŞ ğĞščřŠŘŇĚŽĎŤČňěž UU I iT - ¿ „“ * @] *. Vergiss nicht, die Charaktere bei Bedarf zu entkommen und verwende Bereiche, wenn möglich. so viele Zeichen in der nicht erlaubten Liste wie

Hinzufügen [^ œçşÇŞ ğĞščřŠŘŇĚŽĎŤČňěž UU i iT - ¿ „“ * @] + scheint nicht zu funktionieren.

In Ihrer Liste befinden sich Leerzeichen. Sind sie auch in deinem Code? Ich bin mir nicht sicher, aber vielleicht ist das ein Problem.

0

Es wäre am besten, jedes Zeichen zu suchen, das nicht erlaubt ist, indem man die erlaubte Menge negiert. Wenn Sie beispielsweise nur "a" bis "z" zulassen möchten, können Sie Folgendes tun.

[^a-z] 

können Sie möglicherweise alle der Charaktere wissen nicht, dass nicht erlaubt sind, aber Sie vermutlich die, die wissen, die erlaubt sind. Erstellen Sie also einen regulären Ausdruck wie den obigen, der nur mit einem Zeichen übereinstimmt, das nicht im zulässigen Satz ist. Wenn Sie eine Übereinstimmung erhalten, wissen Sie, dass die Zeichenfolge ein ungültiges Zeichen enthält.

Wenn Sie können, versuchen Sie, integrierte Zeichenklassen-Escape-Codes zu verwenden, wenn sie verfügbar sind.

Finden Sie sie für Perl RE here, suchen Sie nach "Charakterklassen und andere spezielle Escapes". Es kann Ihnen erlauben, einen kürzeren Ausdruck wie diesen zu haben.

[^\w\d ..other individual chars.. ] 
Verwandte Themen