【发布时间】:2019-06-03 16:19:40
【问题描述】:
我想自动删除与输入中的模式不匹配的所有字符。我首先使用“^”进行了尝试(例如:“[a-z]{2,2}”将转换为“[^a-z]*”),但这仅适用于某些输入。
这是我的代码:
$("input:not([ignore-pattern-check])[pattern]").on("input", function(){
let val = $(this).val();
if (val.length >= 1){
var regex = $(this).attr("pattern");
if (regex.charAt(0) == "^"){
regex = regex.substr(1, regex.length);
}
if (regex.charAt(regex.length - 1) == "$"){
regex = regex.substr(0, regex.length - 1);
}
regex = regex.replace(/\{(.+?)\}/, "*");
regex = "^(?!.*(" + regex + "))$";
let reg = new RegExp(regex);
if (reg.test(val)){
alert("This char isn't allowed!");
} else {
_hide_message();
}
$(this).val(val.replace(reg, ""));
}
});
编辑
例子:
我有一个pattern="^[a-z]*$" 的输入。当我现在键入一个“A”(区分大小写)时,这个“A”应该会自动从值中删除。当我键入“a”时,它不应该被删除。
【问题讨论】:
-
试试这样:
$(this).val(val.split(/your_pattern/).join(""))而不是整个if块。 -
不起作用。我将其更改为:
$(this).val(val.split(/$(this).attr("pattern")/).join("")). -
我建议在
.split中使用 regex 模式,而不是在分隔符中使用一些代码。$(this).val(val.split($(this).attr("pattern")).join(""))如果$(this).attr("pattern")是RegExp对象。如果$(this).attr("pattern")不是RegExp 对象,请使用new RegExp($(this).attr("pattern"))。 -
模式
^[a-z]$表示1个小写字母,所以AB是无效的,如果你把它反过来你应该可以输入AB不是吗? -
我希望你能用更简单的术语来解释它。试图将大型正则表达式信息保留在我的脑海中,然后不得不破译你的意思,这有点太过分了。
标签: javascript jquery regex