用正则表达式

问题描述:

完成我想提出我的网页浏览器中输入一个autocompleteer,例如,如果你按tab键,字htt是自我完成,以tp://添加到我的输入用正则表达式

的价值自动完成属性只有在用户在URL的开头输入“htt”时才有效。

我想使用正则表达式验证自动完成:

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

但结果不是预期的一个...

三件事改变:

  • 你没有分配到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