2013-11-21 182 views
1

我一直都在做這個正則表達式天了,我不能讓它想通了。它要麼通過我放在那裏的所有東西,要麼將所有東西都踢出去,我似乎無法使其發揮作用。無可否認,我對使用Javascript來完成這個複雜的東西感到陌生,所以可能你真的無法做到這一點。正則表達式不匹配正確

我要檢查onkeypress事件發生了什麼輸入到輸入,然後驗證它爲x,y或z。然後從那裏發送它的方式來做其他乾淨的東西。

所以,問題是究竟發生了什麼我不能瞭解有關正則表達式?

這裏是它的一個FIDDLE

function val() { 
    var gradeIn = document.querySelectorAll("#letGrade input[type=text]"); 
    var checkGrade = new RegExp(/[xyz]/gi); 
    for (var i = 0; i < gradeIn.length; i++) { 
     if (!checkGrade.test(gradeIn.value)) { 
      alert ("This must be X, Y, or Z"); 
      return false; 
     } else { 
      return true; 
     } 
    } 
}; 

編輯/ UPDATE: 我試圖做到這一點的按鍵和驗證每個文本輸入individualy然而這是真的在事物的宏偉計劃有點粘糊糊的,不工作了完全正確的。我決定驗證提交的所有文本輸入,並一次全部完成。更新後的代碼如下。

function calcGPA() { 
    var grades = document.querySelectorAll("#letGrade input[type=text]"); 
    var contacts = document.querySelectorAll("#conHours input[type=text]"); 
    var gVals = []; 
    var cVals = []; 
    var failGrade = "The Letter Grade input may only be A, B, C, D or F"; 
    var failHours = "The Contact Hours input may only be 1, 2, 3, 4 or 5"; 
    var checkGrade = /^[ABCDF]/; 
    var checkhours = /^[12345]/; 

    for (var i = 0; i < grades.length; i++) { 
     if (!checkGrade.test(grades[i].value)) { 
      alert(failGrade); 
      return false; 
     } 
     if (!checkhours.test(contacts[i].value)) { 
      alert(failHours); 
      return false; 
     } 
     gVals.push(grades[i].value); 
     cVals.push(contacts[i].value); 
    } 
    //Other cool stuff happens here 
}; 

我們只是完成轉換部分的字母數字和數學部分。感謝您對此的幫助!

+0

正則表達式的構造函數需要一個字符串和標誌用逗號隔開 – 1252748

回答

2

問題的不僅僅是您的正則表達式。

if (!checkGrade.test(gradeIn[i].value)) { 

您並未檢查每個年級。現在,如果你想讓它是那些人物,你必須擴展正則表達式一點。另外,如果您使用本地語法,則沒有要求調用new RegExp

var checkGrade = /^[xyz]+$/; 

這意味着您可以將字段設置爲「xxyyz」或「zzy」。如果它應該只是一個字符,那會是

var checkGrade = /^[xyz]$/; 
+0

我早些時候說已經長得很像,問題是哪裏,但由於某種原因,它仍然是評論不工作。我不知道我是否仍然在做不正確的事情。我認爲for循環是矯枉過正?爲什麼我要循環所有輸入,當我驗證他們個人? –

+0

@OtisEugeneAnderson嗯,這是一個很好的觀點。您真的只需要驗證例程就可以對受按鍵影響的輸入進行運行。 – Pointy

+0

我會接受你的答案,因爲它確實指向了正確的方向。出於某種原因/^[xyz] /返回所需的結果,但/^[xyz] $ /不。我所假設的$符號沒有太多注意,導致檢查在第一場比賽結束後停止,並且正在結束循環,因此該輸入沒有完全完成。然而,我拿出了美元,現在它工作得很好。感謝您的幫助。我編輯操作以顯示代碼的最新版本。 –