正则表达式没有正确匹配

时间:2013-11-21 18:37:01

标签: javascript regex

我已经在这个正则表达式工作了好几天了,我无法理解它。它要么传递我放在那里的所有东西,要么把所有东西都拿出来,我似乎无法使其发挥作用。不可否认,我是新手用Javascript做这个复杂的东西,所以可能你真的不能这样做。

我想检查onkeypress输入的内容,然后将其验证为x,y或z。然后从那里发送关于其他整洁的东西。

所以问题是我对RegExp的了解到底是什么?

以下是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;
        }
    }
};

EDIT / UPDATE: 我试图在按键上执行此操作并单独验证每个文本输入但是这在事物的宏观方案中确实有点软弱而且没有完全正确。我决定在提交时验证所有文本输入,并让所有内容一次完成。更新后的代码如下。

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

现在只需完成字母到数字和数学片段的转换。感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

问题不仅在于你的正则表达式。

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

你没有检查每个年级。现在,如果您希望成为那些字符,则必须稍微扩展正则表达式。此外,如果您使用的是原生语法,则无需调用new RegExp

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

这意味着您可以使用“xxyyz”或“zzy”等字段。如果它应该只是一个字符,那就是

var checkGrade = /^[xyz]$/;