2017-11-03 22 views
-1

完成我想提出我的網頁瀏覽器中輸入一個autocompleteer,例如,如果你按tab鍵,字htt是自我完成,以tp://添加到我的輸入用正則表達式

的價值自動完成屬性只有在用戶在URL的開頭輸入「htt」時纔有效。

我想使用正則表達式驗證自動完成:

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

但結果不是預期的一個...

回答

2

三件事改變:

  • 你沒有分配到myInput.value,因爲您與==進行比較而不是=
  • 正則表達式應該最好有一個字符串錨點的結尾$,否則其他文本在最初的「h」後面(也許在編輯已經存在的「http」之後)可能會被替換 - 可能是不可取的。
  • TAB鍵的默認行爲應該最好取消,以便自動完成不僅可以在離開輸入框時使用。但是,更改TAB鍵的默認行爲不會有我的偏好。

這裏是一個工作片段:

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

好答案整體,但我建議稍微更具擴展性的模式:'H(?T(?T(? :p(?:: \ /?)?)?)?)?' – CAustin

+0

@CAustin,是的,這確實是更有效率,雖然我猜正則表達式解析器會(應該)實際上足夠聰明來編譯它(除了對於非捕獲組,這當然是一個區別)。 – trincot

+0

謝謝你的回答!這正是我期待的驚人之處,感謝您的專業知識 – Chr