รหัสชุดเพื่อทดสอบว่าสคริปต์มีสิ่งอื่นนอกเหนือจากตัวอักษรและตัวเลขหรือไม่

ฉันสงสัยว่าเป็นไปได้หรือไม่ที่จะทดสอบตัวแปรเพื่อดูว่ามีอะไรอื่นนอกจากตัวอักษรและตัวเลขหรือไม่? ฉันจำเป็นต้องมีสิ่งนี้เพื่อจำกัดข้อกำหนดชื่อผู้ใช้ ฉันมีสคริปต์ตัวอย่างด้านล่าง

 :top
echo enter a name
set /p name=">"
If contains (Anything other than letters/numbers/dashes) echo Invalid Name. & goto top
echo thank you!
pause

ขอบคุณทุกคน!

แก้ไข: ฉันคิดว่านี่อาจจะซ้ำกัน แต่ฉันไม่รู้ว่าจะค้นหาอะไรเพื่อค้นหาโพสต์อื่น ๆ ... เมื่อใดก็ตามที่ฉันค้นหาสิ่งที่เกี่ยวข้องกับคำถามของฉัน มันจะค้นหาและแทนที่ในไฟล์ข้อความหรืออย่างอื่น ไม่เกี่ยวข้องกัน หากใครสามารถพบรายการที่ซ้ำกันโปรดแจ้งให้เราทราบและฉันจะปิดคำถามนี้ ขอบคุณ


person Mark Deven    schedule 07.11.2017    source แหล่งที่มา
comment
ฉันชอบการแก้ไขของคุณ... แต่ไม่น่าจะเป็นไปได้มากว่าสิ่งนี้จะซ้ำกัน รายการที่ซ้ำกันจริงๆ จะต้องเป็นคำถามเดียวกัน คุณควรระวังการตรวจสอบคำหลัก ชอบที่นี่ stackoverflow.com/questions/20414027/   -  person Harry    schedule 07.11.2017
comment
@แฮร์รี่ ขอบคุณแฮร์รี่ ดีใจที่ได้ยินแบบนั้นสักครั้ง... ฉันคิดว่าคนอื่นๆ จำนวนมากไม่เข้าใจคำหลักนี้ บางทีเจ้าหน้าที่ควรอธิบายเรื่องนี้กับทุกคนอีกครั้ง การถามข้อผิดพลาดกับสคริปต์ PHP นั้นแย่มาก เพราะพวกเขามักจะชี้ไปที่สคริปต์ที่เกี่ยวข้องกับคำถามเล็กน้อย ขอบคุณ.   -  person Mark Deven    schedule 08.11.2017
comment
มันเป็นเรื่องที่ค่อนข้างซับซ้อนในการระบุสิ่งที่ซ้ำกันและขึ้นอยู่กับความคิดเห็นเป็นหลัก หากคุณไม่ต้องการให้คำถามถูกทำเครื่องหมายว่าซ้ำกัน คุณควรวางลิงก์ไปยังคำถามที่คล้ายกันและชี้ให้เห็นว่าคำถามของคุณกับคำถามที่เชื่อมโยงแตกต่างกันอย่างไร นี่แสดงว่าคุณได้สละเวลาในการค้นหาด้วยตัวเองซึ่งจำเป็นสำหรับคำถามใดๆ หลักฐานการวิจัย   -  person Harry    schedule 08.11.2017
comment
@Harry ฉันไม่ได้คิดที่จะเพิ่มลิงค์ขอบคุณ   -  person Mark Deven    schedule 09.11.2017


คำตอบ (2)


อนุญาตเฉพาะตัวอักษร ตัวเลข และขีดกลางเท่านั้น:

@echo off & setlocal

:top
set /P "name="Enter a name: "
setlocal enabledelayedexpansion
echo(!name!| findstr /i "[^a-z0-9-]" >NUL && (
    endlocal
    set /P "=Invalid name. " <NUL
    goto top
)

endlocal
echo Thank you %name%!
pause
person rojo    schedule 07.11.2017

ใช้งานได้กับอักขระ ASCII ส่วนใหญ่ มันอาจมีคำเตือนบางประการ

@echo off
set /p "name=Enter a name>"
set "test=%name%"
FOR %%G IN ( a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 ) do (
    IF DEFINED test call set "test=%%test:%%G=%%"
)
IF DEFINED test (
    echo Invalid characters in username:"%test%"
) else (
    echo Good Username: "%name%"
)
pause
person Squashman    schedule 07.11.2017
comment
Rojo's กระชับขึ้นอีกเล็กน้อย ดังนั้นฉันจึงใช้สิ่งนั้น แต่ฉันชอบการปรับแต่งสคริปต์ของคุณที่ง่ายดาย ขอบคุณ. - person Mark Deven; 08.11.2017