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.

Ion
quelle

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
Matthew Flaschen
quelle
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
luk3thomas
quelle
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.

Laufsteg
quelle
@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
Gumbo
quelle
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.

Mark Byers
quelle
3

Akzeptiert / stimmt nur mit ASCII-Zeichen überein

/^[\x00-\x7F]*$/
Vaibhav Gaikwad
quelle
0

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

xxx.+xxx
m_vitaly
quelle
0

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

xxx.+xxx
RoToRa
quelle