ฉันต้องการจับคู่สองรหัสผ่านกับนิพจน์ทั่วไป ตัวอย่างเช่นฉันมีสองอินพุต "123456" และ "1234567" ดังนั้นผลลัพธ์ควรไม่ตรงกัน (false) และเมื่อฉันป้อน "123456" และ "123456" ผลลัพธ์ควรตรงกัน (จริง)
ฉันไม่สามารถแสดงออกได้ ฉันต้องทำอย่างไร?
ฉันต้องการจับคู่สองรหัสผ่านกับนิพจน์ทั่วไป ตัวอย่างเช่นฉันมีสองอินพุต "123456" และ "1234567" ดังนั้นผลลัพธ์ควรไม่ตรงกัน (false) และเมื่อฉันป้อน "123456" และ "123456" ผลลัพธ์ควรตรงกัน (จริง)
ฉันไม่สามารถแสดงออกได้ ฉันต้องทำอย่างไร?
คำตอบ:
หากคุณมีรหัสผ่านสำหรับป้อนข้อมูลในตัวแปรและคุณต้องการจับคู่ที่ตรงกัน 123456 จุดยึดจะช่วยให้คุณ:
/^123456$/
ใน Perl การทดสอบสำหรับการจับคู่รหัสผ่านจะเป็นสิ่งที่ต้องการ
print "MATCH_OK" if ($input_pass=~/^123456$/);
แก้ไข:
บาร์ต kiersถูกต้องทำไมคุณไม่ใช้ strcmp () สำหรับสิ่งนี้? ทุกภาษามีในแบบของตัวเอง
เป็นความคิดที่สองคุณอาจต้องการพิจารณากลไกการรับรองความถูกต้องปลอดภัยกว่า :)
\z
ตรงกับทั้งสองและตามด้วยอาหารเส้นในขณะที่การแข่งขันเท่านั้น $
/^123456$/
123456
123456
/^123456\z/
123456
ในคำตอบที่ผิดปกติ'^'และ'$'ถูกใช้เพื่อตรวจจับจุดเริ่มต้นและจุดสิ้นสุดของข้อความ
โดยปกติจะใช้เพื่อตรวจจับจุดเริ่มต้นและจุดสิ้นสุดของบรรทัด
อย่างไรก็ตามนี่อาจเป็นวิธีที่ถูกต้องในกรณีนี้
แต่ถ้าคุณต้องการที่จะตรงกับคำที่แน่นอนวิธีที่สง่างามมากขึ้นคือการใช้'\ b' ในกรณีนี้รูปแบบต่อไปนี้จะตรงกับวลีที่แน่นอน '123456'
/ \ b123456 \ b /
\bhttp:\/\/www.foo.com\b
จะจับคู่http://www.foo.com=?http://www.foo.com
กับ URL ตามที่เป็นอยู่ การตอบกลับครั้งแรกโดยใช้^
(เริ่มต้น) และ$
(สิ้นสุด) เป็นวิธีที่ดีที่สุดผ่านผู้ทดสอบเหล่านี้: regex101.comและregexr.com (ผู้ทดสอบที่รวมอยู่ในลิงก์ด้านล่างนี้ไม่ได้ใช้งานง่ายมากผู้ใช้เหล่านี้ดีกว่ามาก)
(?<![\w\d])abc(?![\w\d])
สิ่งนี้ทำให้แน่ใจได้ว่าการจับคู่ของคุณไม่ได้นำหน้าด้วยอักขระตัวเลขหรือขีดเส้นใต้และไม่ได้ตามด้วยอักขระหรือหมายเลขหรือขีดล่าง
ดังนั้นจึงจะตรงกับ "abc" ใน "abc", "abc.", "abc" แต่ไม่ใช่ "4abc" หรือ "abcde"
\w
จับคู่ตัวเลขและตัวอักษรดังนั้นจึง[\w\d]
ซ้ำซ้อน
วิธีที่ตรงไปตรงมามากขึ้นคือการตรวจสอบความเท่าเทียมกัน
if string1 == string2
puts "match"
else
puts "not match"
end
อย่างไรก็ตามถ้าคุณต้องการที่จะยึดติดกับการแสดงออกปกติ
string1 =~ /^123456$/
/\s+123456\s+/i
นอกจากนี้คุณยังอาจพยายามผนวกพื้นที่ที่เริ่มต้นและจุดสิ้นสุดของคำหลัก: