2012-09-11 34 views
0

我在使用javascript驗證某些字段時遇到了一些麻煩。我試圖測試一個名爲30個字符的字段,John Smith,Paul M'Dougall Laura-Jane都應該測試真實,但gazz8932應該測試錯誤。Javascript驗證問題

該EAID應該是最多16個字符123kjg-34_dfs應該測試真實,但將* & $等它應該測試錯誤。

最後,網址應該來自youtube.com或ea.com,但我無法打賭任何這些工作。

如果任何光線可以擺脫這將是非常讚賞...

// create the errors array 
var errors = false; 

// clean last errors 
$('#goalsubmission p.error').remove(); 
$('#goalsubmission .error').removeClass('error'); 

// test the name 
var reg = /^[a-z ,.'-]{0,30}/i; 
var name = $('#goalsubmission input#name'); 
if(reg.test(name.val()) == false){ 
    name.parent().addClass('error'); 
    errors == true; 
    name.parent().append('<p class="error">Make sure you have put your name using only letters and spaces.</p>'); 
} else { 
    name.parent().removeClass('error'); 
} 

/* 
// test the email 
var reg = /(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/; 
var email = $('#goalsubmission input#email'); 
var result = reg.test(email.val()); 
if(email.val().length == 0 || result == false){ 
    email.parent().addClass('error'); 
    errors == true; 
    email.parent().append('<p class="error">Make sure you have entered a valid email address.</p>'); 
} else { 
    email.parent().removeClass('error'); 
} 
*/ 

// test the ea id 
var reg = /^[a-z0-9-_]{0,16}/i; 
var eaid = $('#goalsubmission input#eaid'); 
if(reg.test(eaid.val()) == false){ 
    eaid.parent().addClass('error'); 
    errors == true; 
    eaid.parent().append('<p class="error">Make sure you have entered a valid EAID.</p>'); 
} else { 
    eaid.parent().removeClass('error'); 
} 

// test the url 
var regYT = /^http:\/\/(?:www\.)?youtube.com\/watch\?v=\w+(&\S*)?$/ 
var regEA = /^http:\/\/(?:www\.)?ea.com\/?$/ 
var url = $('#goalsubmission input#url'); 
if(
//       url.val().length == 0 || 
//       url.val().length > 255 || 
    (regYT.test(url.val()) == false && regEA.test(url.val()) == false) 
){ 
    url.parent().addClass('error'); 
    errors == true; 
    url.parent().append('<p class="error">Make sure you have entered a valid Url, from either YouTube or EA.</p>'); 
} else { 
    url.parent().removeClass('error'); 
} 
+0

你可以指定說爲什麼'gazz8932'或'規則* &$'沒有有效的匹配? –

+0

/^ [a-z,.'-] {0,30} /我據我的理解說,從字符串的開始字符串不區分長度0-30字符尋找AZ空格,逗號,fullstops,連字符和引號。這不是這種情況嗎?沒有提及數字,所以如果數字是正確的,它應該測試錯誤? – gazzwi86

+0

是的。我看到了我誤解的根源:你在一個問中提出三個問題。也許更好地分解問題,重點放在每個正則表達式上。更好地首先搜索這個網站,因爲這樣的問題已經被問過幾十次了。 –

回答

2

您需要標記與$在年底正則表達式,所以它不會從進一步匹配任何表達。這樣一來,你會與下面的表達式匹配"Paul",但不"Paul123"

var reg = /^[a-z ,.'-]{0,30}$/i; 

同樣的事情發生與eai

var reg = /^[a-z0-9-_]{0,16}$/i; 
+0

不,大寫字母包含在內('/ i'修飾符)。 –

+0

@TimPietzcker:你說得對,謝謝,沒有看到它。 –