如何在批处理脚本中验证用户输入的电子邮件格式?

How to validate user input email format in a batch script?

我想让用户在 运行 脚本之前输入他们的电子邮件地址,我正在这样做:

:input
set /p email="Please enter your email address: "
(echo %email% | findstr "@ [] "%email:~7,1%"==""" >nul 2>&1) && (ECHO valid email >nul) || (echo This is not a valid email address.Please try again.) && GOTO Input

使用上面的代码,我可以检查任何空白 space,电子邮件中是否存在 @ 和至少 7 个字符(即即使用户键入虚拟 a@b.com),但我我不确定如何检查用户可以只键入 (@b.com) 的情况,而@之前什么也没有。此外,我想为输入字段中的用户禁用或静音 "TAB",以便他们无法使用 TAB。

我愿意用任何其他方式检查整个电子邮件格式吗?

您可以试试这个解决方案:

@echo off
echo Type your e-mail address :
Set /p "Email="
Call :CheckValidMail %Email%
cls
IF "%errorlevel%" EQU "0" ( 
    Color 0A
    echo %Email% is valid 
) else (
    Color 0C
    echo %Email% is not valid
)
pause & Exit
::*********************************************************************************
:CheckValidMail <Email>
(
echo If IsValidEmail("%~1"^) = True Then
echo    Wscript.Quit(0^)
echo Else
echo    Wscript.Quit(1^)
echo End If
echo Function IsValidEmail(strEAddress^)
echo    Dim objRegExpr
echo    Set objRegExpr = New RegExp
echo    objRegExpr.Pattern = "^[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]@[\w-\.]*[a-zA-Z0-9]\.[a-zA-Z]{2,7}$"
echo    objRegExpr.Global = True
echo    objRegExpr.IgnoreCase = False
echo    IsValidEmail = objRegExpr.Test(strEAddress^)
echo    Set objRegExpr = Nothing
echo End Function
)>"%tmp%\%~n0.vbs"
Cscript /nologo "%tmp%\%~n0.vbs"
Exit /b
::*********************************************************************************