Feldvalidierung für reguläre Ausdrücke in jQuery

75

Gibt es in jQuery eine Funktion / ein Plugin, mit dem ich einen bestimmten regulären Ausdruck in einer Zeichenfolge abgleichen kann?

In einem E-Mail-Eingabefeld erhalte ich beispielsweise eine E-Mail-Adresse und möchte prüfen, ob sie das richtige Format hat. Welche jQuery-Funktion sollte ich verwenden, um festzustellen, ob mein validierender regulärer Ausdruck mit der Eingabe übereinstimmt?

Ich habe nach einer Lösung gegoogelt, aber ich konnte nichts finden.

anand.trex
quelle
1
Der Titel dieser Frage ist etwas irreführend. Es sollte vielleicht besser qualifiziert sein, anzuzeigen, dass dies mit der Übereinstimmung der Formulareingabewerte zu tun hat. Ich habe die Antwort von nickf mit +1 bewertet, weil ich danach gesucht habe.
Mydoghaswürmer

Antworten:

26

Ich glaube das macht es:

http://bassistance.de/jquery-plugins/jquery-plugin-validation/

Es verfügt über integrierte Muster für URLs und E-Mail-Adressen, und ich denke, Sie können auch Ihre eigenen verwenden.

Daniel Schaffer
quelle
1
Aber was ist mit dem allgemeinen Regex-Matching? Vielleicht so etwas wie die Suche nach einem
regulären Ausdruck
12
Nun, ich meine, Sie können immer nur den regulären Ausdruck von
Daniel Schaffer
7
Bin ich es nur, oder hat JQUERY eine schreckliche Website? Ich kann nicht ohne weiteres herausfinden, wie ich dieses Ding verwenden oder herunterladen kann.
Jason
83

Wenn Sie einige Elemente basierend auf einem regulären Ausdruck suchen möchten, können Sie die filterFunktion verwenden. Angenommen, Sie möchten sicherstellen, dass der Benutzer in allen Eingabefeldern nur Zahlen eingegeben hat. Suchen Sie also alle nicht übereinstimmenden Eingaben und markieren Sie sie.

$("input:text")
    .filter(function() {
        return this.value.match(/[^\d]/);
    })
    .addClass("inputError")
;

Wenn es nur so etwas wäre, könnten Sie natürlich das Formularvalidierungs-Plugin verwenden, aber diese Methode könnte auf jede Art von Elementen angewendet werden, die Sie mögen. Ein weiteres Beispiel, um zu zeigen, was ich meine: Finden Sie alle Elemente, deren idÜbereinstimmungen/[a-z]+_\d+/

$("[id]").filter(function() {
    return this.id.match(/[a-z]+_\d+/);
});
nickf
quelle
30

Ich verwende jQuery und JavaScript und es funktioniert gut für mich:

var rege = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
if(rege.test($('#uemail').val())){ //do something }
Klatys
quelle
5
Eine leichte Ergänzung, Ihre erkennt nicht, dass Ihre E-Mail-Adresse ein '+' enthält: var rege = /^([A-Za-z0-9_\+\-\.‹)+\@([A-Za-z0- 9 _ \ - \.]) + \. ([A-Za-z] {2,4}) $ /; Ich sage nicht, dass meine perfekt ist, ich sage nur, dass deine für meine E-Mail nicht funktioniert :-)
keif
26

Sofern Sie nicht nach etwas Bestimmtem suchen, können Sie den Abgleich regulärer Ausdrücke bereits mit regulärem Javascript mit Zeichenfolgen durchführen.

Zum Beispiel können Sie einen Abgleich mit einem String durchführen, indem Sie so etwas tun ...

var phrase = "This is a phrase";
phrase = phrase.replace(/is/i, "is not");
alert(phrase);

Gibt es etwas, nach dem Sie suchen, außer nur nach regulären Ausdrücken im Allgemeinen?

Hugoware
quelle
27
Ihr Beispiel wird "Dies ist keine Phrase" zurückgeben! :-)
Ian Roke
7
Lustiger Fang - Ich habe den Code nie ausgeführt, aber Sie haben Recht - Er stimmt mit dem ersten 'ist' überein, das tatsächlich am Ende des Wortes 'Dies' steht. - Da er den Rest der Zeichenfolge ignoriert, macht er nichts zum zweiten 'ist'. Sehr lustig :)
Hugoware
-1 für nicht genug jQuery ... ... ... ok, nur ein Scherz, ich habe deine Antwort tatsächlich positiv bewertet :)
brandizzi
3

Mein Code:

$("input.numeric").keypress(function(e) { /* pour les champs qui ne prennent que du numeric en entrée */          
            var key = e.charCode || e.keyCode || 0;                     
            var keychar = String.fromCharCode(key);
            /*alert("keychar:"+keychar + " \n charCode:" + e.charCode + " \n key:" +key);*/
            if (  ((key == 8 || key == 9 || key == 46 || key == 35 || key == 36 || (key >= 37 && key <= 40)) && e.charCode==0) /* backspace, end, begin, top, bottom, right, left, del, tab */
                    || (key >= 48 && key <= 57) ) { /* 0-9 */
                return;
            } else {
                e.preventDefault();
            }
        });
bilelz
quelle
3
Dies ist kein regulärer Ausdruck
Chris B
0

Ein einfaches heutiges Beispiel:

$('#some_input_id').attr('oninput',
"this.value=this.value.replace(/[^0-9A-Za-z\s_-]/g,'');")

das bedeutet, dass alles, was nicht mit Regex übereinstimmt, nichts wird, dh ''

CodeToLife
quelle
-1

Aus jquery.validate.js (von joern), beigesteuert von Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/

/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i

Stellen Sie sicher, dass Sie das @@ verdoppeln, wenn Sie MVC Razor verwenden:

 /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i

Lust auf Spaghetti?

Har
quelle