Regex ein beliebiges ASCII-Zeichen


75

Was ist der passende Regex xxx[any ASCII character here, spaces included]+xxx?

Ich versuche es xxx[(\w)(\W)(\s)]+xxx, aber es scheint nicht zu funktionieren.

Antworten:


87

Wenn Sie meinen , wirklich jede und ASCII (nicht zB alle Unicode - Zeichen):

xxx[\x00-\x7F]+xxx

JavaScript-Beispiel:

var re = /xxx[\x00-\x7F]+xxx/;

re.test('xxxabcxxx')
// true

re.test('xxx☃☃☃xxx')
// false

Das scheint nicht so zu funktionieren, wie ich es mir vorgestellt habe. Dies entspricht den BYTE-Darstellungen von ASCII-Zeichen, nicht den visuell gedruckten / getippten Zeichen selbst?
anon58192932

@ Advocate, ja, das tut es. In welcher Sprache haben Sie getestet? Das könnte es sein.
Matthew Flaschen

Oh, ich hatte gehofft, etwas zu finden, das zu den gedruckten Versionen von ASCII-Zeichen
passt

10
@advocate, ich denke du suchst ^[\x20-\x7F]+$.
Wrygiel

Eine so schöne Lösung, ich habe so viele schlechte gesehen. Mir war nicht bewusst, dass Regex nach dem Charcode filtern kann, elegant!
John

85
[ -~]

Es wurde hier gesehen . Es werden alle ASCII-Zeichen vom Leerzeichen bis zur Tilde abgeglichen.

Ihre Implementierung wäre also:

xxx[ -~]+xxx

Dies ist perfekt, da die akzeptierte Antwort mit dem Attribut [RegularExpression] in ASP.NET MVC nicht funktioniert hat. Sie wird als Unicode-Zeichen gerendert und bricht die Validierung ab.
Art

4
Wirklich elegante Lösung, gut lesbar und semantisch genau das, wonach ich gesucht habe.
Maschinen Sehnsucht

@Art Dies funktioniert bei mir nicht mit einem [RegularExpression]Attribut ... Musstest du noch etwas Besonderes tun, damit es funktioniert? Mein Attribut ist einfach <Component.DataAnnotations.RegularExpression("[ -~]", ErrorMessage:="Contains invalid characters.")>, akzeptiert aber nicht einmal "asdf".
Zack

Ich denke, egal. Ich habe gerade festgestellt, dass dies nur einem Zeichen entspricht, daher musste ich das + hinzufügen, um es [ -~]+für meine Verwendung zu einem "beliebigen ASCII-Zeichen, ein oder mehrere Male" zu machen.
Zack

1
@Zack Schauen Sie sich diesen Artikel an, den ich mit dem voll funktionsfähigen Beispielcode geschrieben habe: nimblegecko.com/… Hoffe, es hilft und lassen Sie mich wissen, wenn Sie nicht weiterkommen !
Art

24

Sie können die [[:ascii:]]Klasse verwenden.


@catwalk Du bist mein Held für heute! Aus irgendeinem Grund wurde \ x00- \ x7F nicht akzeptiert, aber es dauerte [: ascii:]. Vielen Dank!
n0nag0n

6
Beachten Sie, dass [[: ascii:]] mit jedem ASCII-Zeichen übereinstimmt, auch mit nicht druckbaren Zeichen, während [- ~] nur mit der druckbaren Teilmenge von ASCII übereinstimmt.
Elolos

"Charakterklasse" ?
Peter Mortensen

Hinweis: Ein besserer Name wäre "POSIX-Ausdruck" anstelle von "Klasse". Beachten Sie, dass es nicht in jeder Sprache unterstützt wird, z. B. JavaScript.
Daniel B.

10

Da US-ASCII-Zeichen im Bytebereich von 0x00–0x7F (0–127) liegen:

xxx[\x00-\x7F]+xxx

4

Versuchen Sie es mit .+anstelle von [(\w)(\W)(\s)]+.

Beachten Sie, dass dies tatsächlich mehr enthält, als Sie benötigen - ASCII definiert nur die ersten 128 Zeichen.



0

. steht für jedes Zeichen, also schreiben Sie Ihren regulären Ausdruck wie folgt:

xxx.+xxx

0

Je nachdem, was Sie mit "ASCII-Zeichen" meinen, können Sie einfach Folgendes versuchen:

xxx.+xxx
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.