37 Stimmen

Regulärer Ausdruck für Twitter-Benutzernamen

Ich brauche einen JavaScript-Regulären Ausdruck, um Twitter-Benutzernamen abzugleichen.

Der Benutzername wird vom Benutzer bei der Anmeldung eingegeben, daher möchte ich sie nicht mit zu vielen Fehlermeldungen ablenken. Deshalb muss der Ausdruck gültige Benutzernamen abgleichen, unabhhängig davon, ob sie das @ vor dem Benutzernamen haben oder nicht.

Twitter-Benutzernamen können lateinische Zeichen, Unterstriche und Zahlen enthalten, und die einzige Einschränkung ist, dass sie bis zu 15 Zeichen lang sein können. (Aber ich brauche den Regex auch, um 16 Zeichen abzugleichen, falls jemand das @ vor dem Benutzernamen eingibt).

56voto

asenovm Punkte 6229

Dies sollte funktionieren: ^@?(\w){1,15}$

46voto

rayfranco Punkte 3492

Dies ist die beste Lösung, die ich bisher gefunden habe, um mehrere Vorkommnisse eines Twitter-Benutzernamens zu ersetzen.

Der Regex, der das gewünschte Ergebnis liefert, lautet /(^|[^@\w])@(\w{1,15})\b/. Ich fange das ein, was hinter dem @-Zeichen steht, damit ich den Benutzernamen korrekt ersetzen kann. Und ich verwende die globalen Match-Flagge (g), damit alle Vorkommnisse ersetzt werden. asenovm Antwort ist einfach, funktioniert aber in den meisten Benutzereingabe-Kontexten nicht, wie techexpert in seinem Kommentar erklärt.

var output,
    text    = "@RayFranco antwortet auf @AnPel, dies ist ein echter '@username83' aber dies ist eine@email.com, und das ist ein @probablyfaketwitterusername",
    regex   = /(^|[^@\w])@(\w{1,15})\b/g,
    replace = '$1@$2';

output = text.replace( regex, replace );

console.log ( output );

Dies liefert mir das Ergebnis, das ich erwartet habe (getestet mit node v0.9.1):

@RayFranco antwortet auf @AnPel, dies ist ein echter '@username83' aber dies ist eine@email.com, und das ist ein @probablyfaketwitterusername

Dies basiert auf den Twitter "Spezifikationen" für Benutzernamen:

Ihr Benutzername darf nicht länger als 15 Zeichen sein. Ihr richtiger Name kann länger sein (20 Zeichen), aber Benutzernamen werden kürzer gehalten, um die Benutzerfreundlichkeit zu gewährleisten. Ein Benutzername kann nur alphanumerische Zeichen (Buchstaben A-Z, Zahlen 0-9) enthalten, mit Ausnahme von Unterstrichen, wie oben erwähnt. Überprüfen Sie, ob Ihr gewünschter Benutzername keine Symbole, Bindestriche oder Leerzeichen enthält.

Hoffe, das hilft.

6voto

Rodrigo Polo Punkte 3807

Ein kurzer und einfacher Weg, das zu tun:

function validTwitteUser(sn) {
    return /^[a-zA-Z0-9_]{1,15}$/.test(sn);
}

6voto

suryaveer gaur Punkte 174

@[a-zA-Z0-9_]{0,15}

Sie können obige reguläre Ausdruck verwenden, um die Twitter-Benutzernamen aus einem gemischten Datensatz zu filtern

3voto

inpap Punkte 341

Ein anderer, der die Arbeit erledigt, ist:

/(?

`* Der erste Teil(? entspricht @, wenn kein Buchstabenwert davor steht. Das kann als Filter für potenzielle E-Mail-Adressen verwendet werden, die das Format text@mail.com haben. Da vor @ Text steht, wird die E-Mail-Adresse nicht abgeglichen.``

* Der zweite Teil `[\w+]{1,15}\b` passt zu einer Zeichenkette aus Wortzeichen, nämlich a-z,A-Z,0-9,_, die in einem Twitter-Benutzernamen akzeptiert werden. Der Wortgrenzanker `\b` passt zum Leerzeichen zwischen einem Wortzeichen und einem Nicht-Wortzeichen. Nicht-Wortzeichen sind im Twitter-Benutzernamen nicht erlaubt und werden daher aufgrund von `\b` vom Abgleich ausgeschlossen.

`Zu guter Letzt stelle ich ein Bild bereit, auf dem ich das vorgeschlagene Regex auf den in der zweitmeisten gewählten Antwort von rayfranco bereitgestellten Text geprüft habe, um Übereinstimmungen zu überprüfen.

Bildschirmfoto, Bildschirmfoto` ```

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X