我有一个JavaScript函数,可以在onkeypress / onkeyup事件上成功触发asp.net文本框控件,如下所示:
<asp:TextBox ID="txtboxLatestTag" runat="server" onkeypress="validate()" onkeyup="validate()"></asp:TextBox>
function validate() {
var str = $("#txtboxLatestTag").val();
var pattern = /^\d{1,2}[.]\d{1,2}[.]\d{1,2}[.]\d{1,2}/gm
if (!str.match(pattern))
{
document.getElementById("txtboxLatestTag").style.color = "red";
}
else
{
document.getElementById("txtboxLatestTag").style.color = "white";
}
正则表达式应该匹配以下格式的条目: 10.10.10.10或 1.1.1.1 或者每个“。”之间允许1到2位数的任何内容。字符。 这是有效的,但问题是它也匹配 1.1.1.100即它不应该在字符串的末尾允许3个数字,只允许2个。 这在regexr.com中完美运行,但我无法弄清楚为什么它匹配这个。
谢谢
答案 0 :(得分:0)
我相信你要做的是在字符串末尾排除多余的字符,添加到输入字符$
的末尾(或者行尾字符,因为你使用的是多行模式) 。这将导致末尾的额外字符使匹配无效。例如:
var oldPattern = /^\d{1,2}[.]\d{1,2}[.]\d{1,2}[.]\d{1,2}/gm;
console.log("Old pattern match:");
console.log("10.10.10.100".match(oldPattern));
var pattern = /^\d{1,2}[.]\d{1,2}[.]\d{1,2}[.]\d{1,2}$/gm;
console.log("New pattern match:");
console.log("10.10.10.100".match(pattern));
console.log("10.10.10.1".match(pattern));