
validate form โดย prototype
ว่า แล้วก็เลยต้องทำส่วน validate ขึ้นมา ซึ่งส่วน validate นี้อาศัย prototype validate เข้ามาช่วยงาน มันทำได้ง่ายมากมาย ลักษณะก็เป็น AJAX นั่นเอง แต่ว่าการเขียนโค้ด ไม่จำเป็นต้องเขียน javascript code เลยแม้แต่จุดเดียว!! (สำหรับลูกเล่นพื้นฐาน)
เพราะว่าตัวอย่างที่ผม โหลดมาดูนั้น ทั้งหน้าก็มีแต่ส่วน link javascript เข้ามาแล้วก็ส่วนของ xhml เท่านั้นก็เสร็จแล้ว สามารถ validate ได้เลย เลยทึ่งว่ามันฉลาดขนาดนั้นเลยเหรอ (แต่จะมีส่วนเขียนเพิ่มสำหรับการ validate password ด้วย ที่อยู่ด้านล่าง)
สำหรับตัวอย่างการ validate ข้อมูล ดูได้ที่นี่ครับ http://tetlaw.id.au/upload/pages/really-easy-field-validation/ ถ้า view source code ดูจะพบว่าใช้งานง่ายมากๆ
ถ้าใครเอาไปใช้งานให้ง่ายสุดๆ ก็ save หน้าตัวอย่างลงเครื่องเลยก็ได้ครับ เพราะว่าเค้าเขียน validate ในรูปแบบต่างๆเอาไว้ให้น่าจะครบถ้วนแล้ว อย่างน้อยก็พอใช้เกือบทั้งหมดแล้วล่ะครับ อันนี้ผมนั่งไล่ดูแล้ว
สำหรับเงื่อนไขการ validate จะปรากฏเป็นชื่อ class ครับลองสังเกตุดีๆเช่น
<input name="field111" id="field111" class="required validate-date" title="Enter validate date" />
อันนี้ใช้ class require validate-date ซึ่งแปลว่า จำเป็นต้องกรอก และต้องกรอกในรูปแบบ วันที่ด้วย
สำหรับclass ทั้งหมดที่ใช้ validate ก็มีดังนี้ครับ
required
= จะต้องกรอกด้วยvalidate-number
= ข้อมมูลเป็นลักษณะตัวเลข เช่น 23, 24.09 อะไรแบบนี้ คือจำนวนเต็มหรือทศนิยมได้validate-digits
= ช้อมูลต้องเป็นตัวเลขจำนวนเต็มเท่านั้นvalidate-alpha
= มีแต่ตัวหนังสือเพียงอย่างเดียวvalidate-alphanum
= ตัวหนังสือและตัวเลข(ต้องมีทั้งสองอย่าง)validate-date
= รูปแบบวันที่validate-email
= ต้องเป็น email ที่ถูกต้องvalidate-url
= ต้องเป็น URL ที่ถูกต้องvalidate-date-au
= วันที่ในรูปแบบ dd/mm/yyyyvalidate-currency-dollar
= กรอกค่าเงินในรูปแบบ $validate-selection
= บังคับว่าต้องเลือกรายการ ใน selection list อย่างน้อย 1 รายการ(ที่ไม่ใช่รายการแรก)validate-one-required
= ต้องเลือกปุ่ม option 1 อันจากทั้งหมดที่มีให้เลือก
การเพิ่มลูกเล่นก็คือการสร้าง class ใหม่ขึ้นมา แล้วเราก็สร้าง javascript เพิ่มเติมขึ้นมา
<script type="text/javascript">
var valid = new Validation('form-id', {onSubmit:false});
var result = valid.validate();
</script>
ผมจะสมมุติการกรอกเบอร์โทรมือถือของไทยนะครับ ที่ต้องกรอกเป็น 0888888888 อย่างนี้ ก็จะเขียนได้แบบนี้ครับ<script type="text/javascript">
var valid = new Validation('test', {onSubmit:false});
var result = Validation.add('validate-telephonenumber', 'กรอกไม่ถูกต้อง', {
pattern : new RegExp("^08[0-9]{8}$")
});
</script>
กรณีนี้ผมมี form id ชื่อ test แล้ว class ที่ผมเขียนใหม่ชื่อ validate-telephonenumber เท่านี้เองครับ เสร็จแล้ว ง่ายไหมครับ
สำหรับ option ที่ใช้ validate ทั้งหมด มีดังนี้ครับValidation.add('class-name', 'Error message text', {
pattern : new RegExp("^[a-zA-Z]+$","gi"), // ใช้งานแบบ regular expression
minLength : 6, // ความยาวขั้นต่ำ
maxLength : 13, // ความยาวสูงสุดของตัวหนังสือ
min : 5, // ค่าที่น้อยที่สุด ในกรณีที่เป็ฯตัวเลข
max : 100, // ค่าที่มากที่สุดในกรณีที่เป็นตัวเข
notOneOf : ['password', 'PASSWORD'], // ค่าที่กรอกต้องไม่เป็น หนึ่งในตัวเลือกนี้
oneOf : ['fish','chicken','beef'], // ค่าที่กรอก ต้องเป็นค่าใดค่าหนึ่งในตัวเลือกนี้
is : '5', // จะต้องเป็นค่านี้
isNot : 'turnip', // ต้องไม่เป็นค่านี้
equalToField : 'password', // จะต้องมีค่าซ้ำกัน field ที่ชื่อ
notEqualToField : 'username', // จะต้องมีค่าไม่เท่ากัน field ที่ชื่อ
include : ['validate-alphanum'] // เอาการ validate ของเดิมที่มีมาให้เอามาใช้ ต้องระวังการเกิด infinity loop ด้วยนะครับ
});
เท่านี้เราก็มีส่วน validate form มาใช้แล้วครับแบบง่ายๆและเร็วๆเลย
หลังๆ นี้ผมพยายามหาวิธีทางการเขียนเว็บให้รวดเร็วที่สุด โดยอาศัยเครื่องมือช่วยเหลือต่างๆที่มีอย่างมากมายบนโลกของเรานี้เอง เพื่อลดขั้นตอนการทำงานครับ และในส่วน phase ต่อไปของการพัฒนาตัวผม เองจะเป็นการพัฒนาส่วนของ user interface ให้ใช้งานได้ง่ายและอิสระมากที่สุด (แต่ส่วนนี้จะเป็นส่วนที่เสียเวลาและยุ่งยากมากที่สุด) ก็ติดตามต่อไปได้ครับ(ถ้ามีเวลาและโอกาส)
อ้อ คู่มือแบบภาษาอังกฤษแบบเต็มๆดูได้ที่นี่ครับ http://tetlaw.id.au/view/javascript/really-easy-field-validation
อ้อ อีกเรื่องที่เกือบลืมไป ว่าการ validate ส่วนนี้ไม่ได้หมายความว่าหน้าที่รับ input เหล่านี้จะปลอดภัยนะครับ เพราะว่าส่วนนี้มีผลกระทบเฉพาะ user เท่านั้น สำหรับ robot และ hacker ไม่ได้รับผลกระทบครับ ดังนั้นหน้าที่รับข้อมูลก็จะต้องทำการ validate ข้อมูลซ้ำอีกทีหนึ่งด้วยภาษาสคริปที่ท่านใช้งาน
พึงระลึกเสมอว่า input = devil แต่เราเลี่ยงไม่ได้ที่จะเปิดประตูต้อนรับดังนั้นเราก็ต้อง safe ตัวเองโดยการ scan ให้ดีล่ะครับ