0

尝试创建一个只允许字母、数字和下划线的基本用户名检查。其他任何内容都应再次提示用户输入...

老实说,我试图找到一些更好的解释和例子,用 DOS .bat 文件和 findstr 做这样的事情,..下面的代码不起作用,仍然允许像)(&^ "% 这样的符号输入其他允许的字符...

:setname
set /P username=Enter Username: %=%
echo.%username% | findstr /R "[a-zA-Z0-9_]" >nul 2>&1
if not ErrorLevel 1 (
echo %username%
goto :proceed
)
goto :setname
4

2 回答 2

1
@ECHO OFF
SETLOCAL
:setname
SET "usrname="
set /P usrname=Enter Username: %=%
IF NOT DEFINED usrname GOTO :eof
echo.%usrname%| findstr /R "[^a-zA-Z0-9_]" >nul 2>&1
if ErrorLevel 1 (
 echo %usrname% - OK
) ELSE (
 echo %usrname% - invalid
)
goto :setname

两个基本错误:

首先,您需要找到任何不是 a..zA..Z0..9 的字符

其次,你需要不echo进入as总是无效SPACEfindstrspace

请注意,set /p在 ENTER 上没有将 var 设置为 [nothing] - 它使 var 保持不变,因此您可以将用户名设置为默认值。

USERNAME是一个神奇的变量 - 由系统实例化。逻辑变量名,但是许多预设之一,更改它是不明智的。尝试SET在新会话中从提示执行部分列表...

于 2013-07-08T06:39:03.260 回答
1
@echo off
:input
set "in="
set /p "in=Enter username: "
for /f "delims=1234567890abcdefghijklmnopqrstuvwxyz" %%a in ("%in%") do goto :input
echo "%in%"
于 2013-07-08T07:57:10.420 回答