การทำความเข้าใจ Javascript Regex: แก้ไขปัญหาการตรวจสอบชื่อแสดงผลทั่วไป
หากคุณเพิ่งเริ่มต้นในการพัฒนาเว็บ คุณอาจพบว่าตนเองต้องจัดการกับ regex (นิพจน์ปกติ) ใน Javascript หนึ่งในการใช้งานที่พบบ่อยคือการตรวจสอบข้อมูลที่ผู้ใช้ป้อน เช่น ชื่อแสดงผลในระหว่างการลงทะเบียน ในโพสต์บล็อกนี้ เราจะจัดการกับปัญหาหนึ่ง: วิธีการตรวจสอบชื่อแสดงผลอย่างถูกต้องเพื่ออนุญาตเฉพาะตัวอักษร ตัวเลข และขีดล่าง
ปัญหาที่เกิดขึ้น
เมื่อสร้างฟอร์มลงทะเบียน สิ่งสำคัญคือต้องมั่นใจว่าชื่อแสดงผลเป็นไปตามเกณฑ์เฉพาะ นี่คือตัวอย่างของโค้ดที่ตั้งใจจะทำให้บรรลุเป้าหมายนี้:
<form method="post" action="/" onsubmit="return check_form()">
<input type="text" id="display-name" name="display-name" maxlength="255" />
<input type="submit" />
</form>
<script type="text/javascript">
var name_regex = /^([a-zA-Z0-9_])+/;
function check_form() {
if (!name_regex.test(document.forms[0].elements[0].value)) {
document.forms[0].elements[0].focus();
alert("ชื่อแสดงผลของคุณสามารถประกอบด้วยเฉพาะตัวอักษร ตัวเลข และขีดล่างเท่านั้น");
return false;
}
}
</script>
แม้ว่าโค้ดนี้จะมีตั้งใจดี แต่ก็ล้มเหลวในการจำกัดชื่อแสดงผลอย่างถูกต้อง มาดูกันว่าทำไมถึงเกิดขึ้นและจะแก้ไขอย่างไร
การวิเคราะห์ปัญหา Regex
คำอธิบาย Regex ปัจจุบัน
regex ที่ใช้ในปัจจุบันคือ: /^([a-zA-Z0-9_])+/
นี่คือสิ่งที่มันทำ:
- เริ่มต้นด้วย (
^
): รูปแบบเริ่มต้นด้วยจุดเริ่มต้นของสตริง - ตรวจสอบ (
([a-zA-Z0-9_])+
): มันตรวจสอบหาตัวอักษร (ทั้งสองกรณี) ตัวเลข หรือขีดล่างหนึ่งตัวหรือมากกว่า
แม้ว่าลอจิกนี้จะดูสมเหตุสมผล แต่ปัญหาก็คือ regex ไม่ได้ยืนยันสิ่งที่เข้ามาหลังจากการจับคู่เริ่มต้น มันจะอนุญาตให้มีตัวอักษรใด ๆ หลังจากลำดับที่ถูกต้องเริ่มต้น ส่งผลให้เกิดผลลัพธ์ที่ไม่คาดคิด
วิธีแก้ไข: ปรับเปลี่ยน Regex
เป้าหมายคือการรับรองว่าสตริงทั้งหมดประกอบด้วยตัวอักษรที่ถูกต้อง เพื่อให้บรรลุเป้าหมายนี้เราจำเป็นต้องปรับปรุง regex เพื่อบังคับทางเลือกต่อไปนี้:
- ต้องเริ่มต้นด้วยตัวอักษรที่ถูกต้อง
- ต้องสิ้นสุดหลังจากตัวอักษรที่ถูกต้อง ไม่อนุญาตให้มีสิ่งอื่น
regex ที่ปรับปรุงแล้วควรมีลักษณะดังนี้:
/^([a-zA-Z0-9_]+)$/
- เพิ่ม (
$
): สัญลักษณ์ดอลลาร์ที่ตอนท้ายทำการจับคู่กับจุดสิ้นสุดของสตริง การรวมนี้ยืนยันว่าอนุญาตให้มีเพียงตัวอักษร ตัวเลข หรือขีดล่างตลอดทั้งสตริงเท่านั้น
การปรับปรุงโค้ด: แนวทางที่มีความแข็งแกร่งมากขึ้น
การเข้าถึงองค์ประกอบของฟอร์ม
นอกจากนี้ ในขณะที่โค้ดปัจจุบันใช้ document.forms
วิธีที่เป็นมาตรฐานและเชื่อถือได้มากกว่าคือการเข้าถึงข้อมูลอินพุตโดยตรงโดยใช้ ID ซึ่งสามารถทำให้โค้ดของคุณสะอาดขึ้นและเสี่ยงต่อปัญหาน้อยลงหากคุณตัดสินใจที่จะเปลี่ยนโครงสร้างของ HTML ของคุณ
นี่คือวิธีที่คุณสามารถปรับฟังก์ชัน check_form
:
function check_form() {
var displayName = document.getElementById('display-name').value;
if (!name_regex.test(displayName)) {
document.getElementById('display-name').focus();
alert("ชื่อแสดงผลของคุณสามารถประกอบด้วยเฉพาะตัวอักษร ตัวเลข และขีดล่างเท่านั้น");
return false;
}
}
บทสรุป
การมั่นใจว่าการป้อนข้อมูลของผู้ใช้ถูกต้องเป็นสิ่งสำคัญในพัฒนาเว็บ ด้วยการปรับปรุงเพียงเล็กน้อยกับ regex ของคุณและวิธีการเข้าถึงองค์ประกอบฟอร์ม คุณสามารถพัฒนาฟอร์มลงทะเบียนของคุณได้อย่างมาก โดยการนำรูปแบบ regex ที่แก้ไขแล้ว /^([a-zA-Z0-9_]+)$/
และการใช้ document.getElementById
แอปพลิเคชันของคุณจะน่าเชื่อถือและใช้งานง่ายมากขึ้น
พร้อมด้วยความรู้นี้ คุณจะใกล้ชิดกับการเชี่ยวชาญ Javascript และมอบประสบการณ์การลงทะเบียนที่ราบรื่นให้กับผู้ใช้ของคุณมากขึ้น ขอให้สนุกกับการเขียนโค้ด!