2016-10-28 29 views
0

我有一個JavaScript函數,成功觸發的onkeypress事件/ onkeyup事件的一個asp.net文本框控件,如下所示:正則表達式不Javascript代碼工作正常

<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

你肯定有什麼不對勁?我使用jsfiddle試過你的代碼,即使對於'1.1.1.100'的情況它也能正常工作。 –

+0

嗨Rax我不希望它爲1.1.1.100工作。我在下面標記了答案。歡呼聲 –

回答

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

+1

感謝堆史蒂文,這已經解決了我的問題 –

相關問題