Javascript 验证正则表达式

Javascript 验证正则表达式,javascript,html,regex,Javascript,Html,Regex,我研究这个问题已经有一段时间了,希望能得到一些指导。我正在提示用户输入“课程”信息(示例AAA.111#2222_aa-1234) 然后,我创建了一个验证函数和按钮,用于从javascript中获取html页面的源代码 在isValidInfo函数中,我可以让它使用: var infoRegExp = /^(\D{3}.\d{3}#\d{4}_\D{2}-\d{4})$/g; 使用IF语句,但else语句不会生成“Invalid information”消息 还有一次,我将函数中的代码更改为

我研究这个问题已经有一段时间了,希望能得到一些指导。我正在提示用户输入“课程”信息(示例
AAA.111#2222_aa-1234
) 然后,我创建了一个验证函数和按钮,用于从javascript中获取html页面的源代码

在isValidInfo函数中,我可以让它使用:

var infoRegExp = /^(\D{3}.\d{3}#\d{4}_\D{2}-\d{4})$/g; 
使用IF语句,但else语句不会生成“Invalid information”消息

还有一次,我将函数中的代码更改为区分大小写的ie

/^(\D[A-Z][A-Z][A-Z].\d{3}#\d{4}_\D[a-z][a-z]-\d{4})$/i;
验证功能/按钮不起作用

<!DOCTYPE html>
<html lang = "en">
    <head>
        <title>Input Course Info</title>
    </head>
    <body>
        <script src = "course.js"></script>
        <button onclick= "validate()">Validate</button>
    </body>

</html>

function isValidInfo(course) {
    var infoRegExp = /^(\D[A-Z][A-Z][A-Z].\d{3}#\d{4}_\D[a-z][a-z]-\d{4})$/i;
    var result = infoRegExp.test(course);
    return result
}
var course = prompt("Enter course information (format: AAA.111#2222_aa-1234): ");
function validate(){
    if (isValidInfo(course)) {
        document.write("Valid information!");
    } else {
        documwnt.write("Invalid information.")
    }
}

输入课程信息
验证
函数isValidInfo(课程){
var infoRegExp=/^(\D[A-Z][A-Z][A-Z]。\D{3}\D{4}\ud[A-Z][A-Z]-\D{4}$/i;
var结果=infoRegExp.test(课程);
返回结果
}
var课程=提示(“输入课程信息(格式:AAA.111#2222_aa-1234):”;
函数验证(){
if(isValidInfo(课程)){
文件。填写(“有效信息!”);
}否则{
documwnt.write(“无效信息”)
}
}
我需要能够单击“验证”按钮,生成“有效信息!”消息或“无效信息”。消息。 任何有益的指导都将不胜感激。 现在代码保持原样,validate按钮什么也不做。正在删除[A-Z]。。。和[a-z],如果我输入aaa.111#2222_aa-1234,则将“i”更改为“g”将使其工作,但任何其他操作都不会产生显示无效信息的消息。

您可以使用

函数isValidInfo(课程){
var infoRegExp=/^[A-Z]{3}\.\d{3}\d{4}\[A-Z]{2}-\d{4}$/i;//如果aaa.111#2222_aa-1234无效,请删除i标志!
var结果=infoRegExp.test(课程);
返回结果
}
var课程=提示(“输入课程信息(格式:AAA.111#2222_aa-1234):”;
函数验证(){
if(isValidInfo(课程)){
返回“有效信息!”;
}否则{
返回“无效信息”;
}
}

console.log(验证(课程))
使用
i
标志意味着
[A-Z]
[A-Z]
之间没有区别,你有
documwnt.write()
你需要
/^[A-Z]{3}.\d{3}.\d{4}.[A-Z]{2}-\d{4}$/i
,请查看
docwnt.write中的打字错误(
.write(
-/docwnt>);这就是它什么都不做的原因:它“崩溃了”。不管怎样,正则表达式是错误的,@WiktorStribiżew正则表达式是正确的,但是没有尾部的
i
。另外,使用
console.log
而不是
document也是一种很好的做法。write
@DanielF如果OP确实不需要区分大小写,则可以安全地删除
i
。在我的解释中,这是清楚的。我之所以使用
I
,是因为问题的最后一句话(我理解
aaa.111#2222_aa-1234
是有效的)谢谢。是的,这很有效!我懂了。因此,我不需要用“\d”或“\d”来指定字符类。我可以不使用[A-Z]{3}。也不需要()@KButler Yes,请注意,
i
修饰符使
[A-Z]
=
[A-Z]
进一步澄清
/[A-Z][A-Z]/
/[A-Z]/i
相同
\D{3}
特别表示3个非数字字符,因此任何非
0123456789
的字符都将被匹配。@PaulJ
/[a-z][a-z]/
/[a-z]/i
不同<代码>/[a-zA-Z]/
是.Derp。。Wiiktor是对的,我刚醒来,完全打错了。