2017-11-03 1 views
-1

Ich mag einen autocompleteer für den Eingang meines Web-Browser machen, zum Beispiel, wenn Sie die Tab-Taste drücken, wird das Wort htt selbst komplette tp:// auf den Wert meines EingangsAbschließen mit regexp

Des hinzufügen Die Autokomplettierungseigenschaft muss nur gültig sein, wenn der Benutzer am Anfang der URL "htt" eingibt.

Ich dachte, die automatische Vervollständigung von einem regulären Ausdruck validiert zu machen:

if(event.keyCode == 9){ 
     if(myInput.value.match(/^(h|ht|htt|http|http:|http:\/)/)){ 
      myInput.value = "http://"; 
     } 
} 

Aber das Ergebnis ist nicht das erwartete ein ...

Antwort

2

Drei Dinge zu ändern:

  • Sie zuweisen nicht myInput.value, weil Sie dort einen Vergleich mit == anstelle von = haben.
  • Der reguläre Ausdruck sollte besser ein Ende des String-Ankers $ haben oder sonst ein Text nach dem anfänglichen "h" (vielleicht nach der Bearbeitung des "http", das schon da war) könnte ersetzt werden - wahrscheinlich unerwünscht.
  • Das Standardverhalten der TAB-Taste sollte besser aufgehoben werden, damit die automatische Vervollständigung nicht nur möglich ist, wenn Sie das Eingabefeld verlassen. Das Ändern des Standardverhaltens des TAB-Schlüssels würde jedoch nicht meine Präferenz haben.

Hier ist ein funktionierendes Schnipsel:

myInput.addEventListener('keydown', function (event) { 
 
    if (event.keyCode == 9){ 
 
     if(this.value.match(/^(h|ht|htt|http|http:|http:\/)$/)){ 
 
      this.value = "http://"; 
 
     } 
 
     event.preventDefault(); 
 
    } 
 
});
<input id="myInput">

+1

Gute Antwort Insgesamt aber würde ich ein etwas skalierbarer Muster vorschlagen: 'h (? T? (: T (? : p (? :: \ /?)?)?)?)? ' – CAustin

+0

@CAustin, ja, das ist in der Tat effizienter, obwohl ich denke, dass Regex-Parser eigentlich schlau genug sein sollten, um es so zu kompilieren (außer für die nicht einfangende Gruppe, die natürlich ein Unterschied bleibt). – trincot

+0

Vielen Dank für Ihre Antworten! Das ist genau das, wonach ich gesucht habe, es ist unglaublich, danke für Ihr Fachwissen – Chr