正则表达式在Javascript代码中无法正常工作

时间:2016-10-28 03:45:58

标签: javascript asp.net regex textbox

我有一个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中完美运行,但我无法弄清楚为什么它匹配这个。

谢谢

1 个答案:

答案 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));