JavaScript/jQuery Regex Ersetzen Eingabefeld mit Gültigen Zeichen
Baue ich ein CMS, wo Benutzer können die SEO-URL einer Seite über einen text-input-regler. Angenommen, der Benutzer ist die Erstellung einer Galerie, und Sie wollen, dass Ihre Seite aus erreicht werden http://www.theirsite.com/my-1st-gallery.
Beachten Sie, wie der "my-1st-Galerie" - Teil nicht enthält illegale Zeichen für eine URL. Da die meisten Benutzer nicht wissen, was erlaubt und nicht erlaubt, ich möchte erstellen Sie eine JavaScript-regex-filter, die filtern/konvertieren alle illegalen Zeichen auf der Taste.
Ich weiß, wie jQuery/JavaScript zu hören für die key-up-Ereignisse, aber ich bin mir nicht sicher, wie man einen regex verwenden, um Folgendes zu tun:
- Filter alle andere Zeichen als a-z, A-Z, 0-9," -", " _ " und ein Leerzeichen.
- Ändern "_" und Leerzeichen durch "-", und lassen den Benutzer wissen, dass das gegebene Zeichen wurde umgewandelt in die "-".
Könnte mir jemand ein gutes Beispiel, wie die regex-Teil. Wieder, ich verstehen Sie, wie zu hören für die key-up-Ereignisse.
Vielen Dank für Ihre Zeit!
Ok, das mit all diesen guten Antworten, ich denke ich kann dieses Stück zusammen für meine web-app. Ich wünschte, ich könnte wählen Sie mehr als eine Antwort als meine Letzte! :S Danke Euch allen!!!
InformationsquelleAutor Oliver Spryn | 2011-07-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warum haben Sie diese gewählt?
Gute Frage, sicher nicht.
Vielleicht weil ich vergessen habe " - Eingang.val(text)," in der es bis vor einer Sekunde? wer weiß
InformationsquelleAutor jdc0589
Konnten Sie so etwas tun (asuming, die Sie haben die Zeichen gespeichert, die in der
key
variable)Hoffe, das hilft. Cheers
InformationsquelleAutor Edgar Villegas Alvarado
Regulären Ausdruck zu entfernen, alle andere Zeichen als das, was Sie angegeben haben, ist erlaubt, und dann ersetzen Sie "_" und "" mit "-":
Wenn dies bezieht sich auf die Anforderung in der Lage sein, um dem Benutzer mitzuteilen, ob Ihre Eingabe geändert wurde, nicht einmal die Mühe, mit dieser Art von Komplexität. Ich ' ll hinzufügen einige zusätzlichen code, um meine post.
InformationsquelleAutor jerluc
Dieser filtert das Zeichen für (1):
Den
/
sind regex-Begrenzer in JavaScript. Die[]
begrenzen Sie einen Charakter-Klasse, und die^
innen der Charakter-Klasse bedeutet "übereinstimmung mit allen Zeichen nicht die innerhalb dieser Klasse". Dann können Sie einzelne Zeichen innerhalb der Klasse (wie "-" und "_"), oder geben Sie einen Bereich (wie "a-z").Den
g
außerhalb der Trennzeichen dient als flag für "Globale Suche", die nur bedeutet, dass die regex-matches mehr als einmal, sonst wird es aufhören, bei den ersten Spiel-und dann aufhören zu suchen. Die\
ist als escape-Zeichen verwendet, die ich nutzen, um zu entkommen, den Bindestrich in die Charakter-Klasse, weil es als meta-Zeichen in Zeichenklassen angeben zeichenbereiche.Ich bin nicht wirklich sicher, ob das nötig ist, denn ich habe nicht gefunden, was in der Java, PHP und Mozilla JavaScript regex-docs, die sagen, Bindestriche müssen escaped werden, wie das, und meine tests in Firefox 5 und Chrome 12 zeigen, dass es funktioniert so oder so.
Lesen Sie mehr über JavaScript regex auf die Mozilla-docs, und testen Sie Ihre regexes in http://regexpal.com/.
Muss entkommen, dass dash in die Charakter-Klasse.
Ich habe versucht, es in beide Richtungen, und beide arbeiteten,
"http://www.theirsite.com/my-1st-gallery".match(/[0-9-]/g);
,"http://www.theirsite.com/my-1st-gallery".match(/[0-9\-]/g);
. Ich habe die regex-Dokumentation für PHP, Java und Mozilla JavaScript, und keiner von Ihnen sagte, Sie haben zu entkommen Bindestriche in einer Charakter-Klasse. Gibt es eine Referenz, die Sie kennen, die anderes sagt?Zee: Innerhalb eines Charakter-Klasse, ein Bindestrich (Bindestrich) ist ein Metazeichen verwendet, um einen Bereich anzugeben. Es sollte maskiert werden, wenn ein literal dash ist, was du meinst zu entsprechen. Jedoch, die meisten regex-Dialekten verzeihen Sie, wenn die Platzierung der (unescaped) auf dem Armaturenbrett ist so, dass es nicht möglicherweise stellen eine Reihe (d.h. am Anfang oder Ende der Klasse). In Ihrem Fall haben Sie Glück gehabt. Siehe: "Metazeichen Innerhalb Charakterklassen" in http://www.regular-expressions.info.
InformationsquelleAutor
Ich bin mit diesem jQuery plugin : http://www.thimbleopensource.com/tutorials-snippets/jquery-plugin-filter-text-input.
InformationsquelleAutor Antonio Petricca