用正则表达式
问题描述:
完成我想提出我的网页浏览器中输入一个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">
好答案整体,但我建议稍微更具扩展性的模式:'H(?T(?T(? :p(?:: \ /?)?)?)?)?' – CAustin
@CAustin,是的,这确实是更有效率,虽然我猜正则表达式解析器会(应该)实际上足够聪明来编译它(除了对于非捕获组,这当然是一个区别)。 – trincot
谢谢你的回答!这正是我期待的惊人之处,感谢您的专业知识 – Chr