Javascript 正则表达式不正确匹配

Javascript 正则表达式不正确匹配,javascript,regex,Javascript,Regex,我已经研究这个正则表达式好几天了,我想不出来了。它要么通过我放进去的所有东西,要么把所有东西都踢出去,我似乎无法让它发挥作用。不可否认,我对用Javascript做这些复杂的事情还不熟悉,所以可能你真的做不到这一点 我想在键盘上检查输入的内容,然后将其验证为x、y或z。然后,从那里发送它关于它的方式做其他整洁的东西 所以问题是我到底对RegExp不了解什么 这里有一个例子 函数val(){ var gradeIn=document.queryselectoral(“#letGrade输入[typ

我已经研究这个正则表达式好几天了,我想不出来了。它要么通过我放进去的所有东西,要么把所有东西都踢出去,我似乎无法让它发挥作用。不可否认,我对用Javascript做这些复杂的事情还不熟悉,所以可能你真的做不到这一点

我想在键盘上检查输入的内容,然后将其验证为x、y或z。然后,从那里发送它关于它的方式做其他整洁的东西

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

这里有一个例子

函数val(){
var gradeIn=document.queryselectoral(“#letGrade输入[type=text]”);
var checkGrade=newregexp(/[xyz]/gi);
对于(变量i=0;i
编辑/更新: 我试着在键盘上做这件事,并单独验证每个文本输入,但这在总体方案中确实有点像泥一样,并且不完全正确。我决定在Submit上验证所有文本输入,并让所有内容同时运行。更新代码如下

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
};
函数calcGPA(){
var grades=document.queryselectoral(“#letGrade输入[type=text]”);
var contacts=document.queryselectoral(“#conHours input[type=text]”);
var gVals=[];
var cVals=[];
var failGrade=“字母等级输入只能是A、B、C、D或F”;
var failHours=“联系时间输入只能是1、2、3、4或5”;
var checkGrade=/^[ABCDF]/;
var checkhours=/^[12345]/;
对于(变量i=0;i

现在完成字母到数字的转换和数学部分。谢谢你在这方面的帮助

问题不仅在于正则表达式

if (!checkGrade.test(gradeIn[i].value)) {
你没有检查每个年级。现在,如果希望它只包含这些字符,则必须稍微扩展正则表达式。另外,如果您使用的是本机语法,那么调用
newregexp
也没有意义

var checkGrade = /^[xyz]+$/;
这意味着您可以将字段设置为“xxyyz”或“zzy”。如果只有一个字符,那就是

var checkGrade = /^[xyz]$/;

regexp构造函数接受一个字符串,标志由前面注释的逗号分隔,该逗号看起来像是问题所在,但由于某种原因,它仍然不起作用。我不知道我是否做了一些不正确的事情。我觉得for循环太过了?为什么我要在单独验证输入时循环所有输入?@OtisEugeneAnderson这是一个很好的观点。你真的只需要验证例程来运行受按键影响的输入。我将接受你的答案,因为它实际上为我指明了正确的方向。出于某种原因,/^[xyz]/返回所需的结果,但/^[xyz]$/不返回。我假设的$符号没有仔细研究它,导致支票在第一次匹配完成后停止,并结束循环,因此for没有完全完成。然而,我拿出了美元,现在它工作得很好。谢谢你在这方面的帮助。我将编辑op以显示代码的最新版本。
var checkGrade = /^[xyz]$/;