2009-11-12 10 views
17

Ich brauche eine Regex, die nur A-Z, a-z, 0-9, das _ Zeichen und Punkt (.) Im Eingang erlaubt. Ich habe versucht:Regex-Übereinstimmung A-Z, a-z, 0-9, _ und

Aber es hat nicht funktioniert. Wie kann ich es reparieren?

+2

könnte mit ein bisschen mehr Informationen zu diesem man tun, es ist ein wenig vage. Einige Beispiel-Eingabe wäre gut und der Kontext, den Sie verwenden, Sprache auch? –

Antwort

40
^[A-Za-z0-9_.]+$ 

Vom Anfang bis zum Ende der Zeichenfolge, passen Sie eines oder mehrere dieser Zeichen an.

Edit:

Beachten Sie, dass ^ und $ Spiel der Anfang und das Ende einer Linie. Wenn Multiline aktiviert ist, kann dies bedeuten, dass eine Zeile übereinstimmt, aber nicht die vollständige Zeichenfolge.

Verwenden Sie \A für den Anfang der Zeichenfolge und \z für das Ende.

Siehe zum Beispiel: http://msdn.microsoft.com/en-us/library/h5181w5w(v=vs.110).aspx

+3

Kann auch '^ [\ w.] + $' Sein, dachte, dass das nicht überall funktioniert. – Kobi

+0

@Kobi: es funktioniert fast überall, nur anders :) – SilentGhost

5

von Arbeiten, was du gegeben hast Ich nehme an, Sie überprüfen möchten, dass jemand irgendwelche Buchstaben andere als die eingegeben Sie aufgelistet haben. Dafür arbeiten Sie für alle Zeichen der nicht unter die gesucht werden soll:

[^A-Za-z0-9_.] 

Und das in Ihrem Code in einem Spiel verwenden, so etwas wie:

if (/[^A-Za-z0-9_.]/.match(your_input_string)) { 
    alert("you have entered invalid data"); 
} 

Hows das?

0

Vielleicht müssen Sie genauer angeben, was nicht funktioniert hat und in welcher Umgebung Sie sind.

In Bezug auf die Behauptung, dass der Punkt in einer Charackter-Klasse speziell ist, trifft dies nicht in jeder Programmierumgebung zu. Zum Beispiel erzeugt die folgende Perl-Skript

use warnings; 
use strict; 

my $str = '!!!.###'; 
$str =~ s/[A-Za-z_.]/X/g; 
print "$str\n"; 

!!!X### 
Verwandte Themen