Windows输入提示验证仅允许使用字母字符和下划线

时间:2013-07-08 05:28:06

标签: regex windows batch-file cmd findstr

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

老实说,我试图找到一些更好的解释和使用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

2 个答案:

答案 0 :(得分: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 SPACE findstr spaceset /p始终无效

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

SET是一个神奇的变量 - 由系统实例化。逻辑变量名,但是许多预设中的一个是不明智的。尝试从新会话中的提示执行{{1}}以获取部分列表...

答案 1 :(得分:1)

@echo off
:input
set "in="
set /p "in=Enter username: "
for /f "delims=1234567890abcdefghijklmnopqrstuvwxyz" %%a in ("%in%") do goto :input
echo "%in%"