javascript - 在 keyup 函数中使用通配符
问题描述
我正在尝试让 keyup 与通配符一起使用,以便它可以匹配类似的 URL,而不是确切的 URL,但是 * 不起作用,我做错了什么?
<script>
$(document).ready(function () {
$("#fname").keyup(function () {
if(this.value == "*.drive.google.com/*"){
$('#input').css("display", "block");
}else{
$('#input').css("display", "none");
}
});
});
</script>
任何帮助都非常感谢。
解决方案
您不能只将 a 传递*
给相等比较,我会这样做:
let generateValidator = (str) => {
const pieces = str.split('*');
let regex = '';
for (let i = 0; i < pieces.length; i++) {
if (pieces[i] === '') {
regex += '.+';
} else {
regex += pieces[i].replace(/\./, '\\.');
}
}
let rule = new RegExp(regex);
return (url) => {
if (!url.startsWith('http')) {
url = `http://${url}`;
}
try {
new URL(url);
} catch (e) {
return false;
}
return rule.test(url);
}
}
let isValid = generateValidator('*.drive.google.com/*');
let valid = {
"www.drive.google.com/test": isValid("www.drive.google.com/test"),
"drive.google.com": isValid("drive.google.com"),
"abc.drive.google.com/world": isValid("abc.drive.google.com/world"),
"#421.drive.google.com/test": isValid("#421.drive.google.com/test")
}
console.log(valid);
然后在你的代码中,你可以这样做:
<script>
let isValid = generateValidator('*.drive.google.com/*');
$(document).ready(function () {
$("#fname").keyup(function () {
if(isValid(this.value)){
$('#input').css("display", "block");
}else{
$('#input').css("display", "none");
}
});
});
</script>
推荐阅读
- flutter - 如何在 DataTable 小部件中滚动 DataRow 项目
- vue.js - 基于插件值的 Vue 计算属性
- regex - 正则表达式:匹配最后一个字符串,直到出现另一个字符串(如果出现)
- python - tf.data.Dataset.window 和 tf.train.SequenceExample
- php - 我想使用 Zend 框架 2 在同一表单上的 2 个不同路径上上传 2 个文件
- java - 方法 println(Object...) 的最后一个参数的类型 int[][] 与 vararg 参数类型不完全匹配
- libgdx - 在 libgdx 中正确实现平移和缩放
- r - Geom_density_2d_filled() ggplot:(1)如何围绕所有点绘制轮廓,(2)如何改变渐变颜色?
- c# -
- javascript - 如何将方法的参数传递到赋值运算符的左侧?