Data Validation Rules
ป้องกันปัญหาตั้งแต่ต้นทาง
Section titled “ป้องกันปัญหาตั้งแต่ต้นทาง”Data Validation คือการตั้งกฎให้เซลล์ยอมรับเฉพาะข้อมูลที่ถูกต้อง — เหมือนใส่รั้วกั้นไม่ให้ข้อมูลผิดเข้ามา
Dropdown List
Section titled “Dropdown List”Dropdown List เป็น Validation ที่ใช้บ่อยที่สุด — ให้ผู้ใช้เลือกจากรายการที่กำหนด
วิธีสร้าง
Section titled “วิธีสร้าง”- เลือกเซลล์หรือ Range ที่ต้องการ
- Data > Data validation > Add rule
- Criteria: Dropdown (from a range) หรือ Dropdown
- ใส่ตัวเลือก เช่น
ใช่, ไม่ใช่, รอดำเนินการ
Dropdown จาก Range
Section titled “Dropdown จาก Range”ถ้ามีรายการใน Sheet อื่น เช่น Reference!A1:A10:
- Criteria: Dropdown (from a range)
- ใส่
Reference!A1:A10 - เมื่อเพิ่มรายการใน Reference → Dropdown จะอัปเดตอัตโนมัติ
// C ไม่มี built-in validation// ต้องเขียน validation function เอง#include <stdio.h>#include <string.h>int validate_status(const char *input) { const char *valid[] = {"active", "inactive", "pending"}; for (int i = 0; i < 3; i++) if (strcmp(input, valid[i]) == 0) return 1; return 0;}valid_options = ["active", "inactive", "pending"]
user_input = input("Status: ")if user_input not in valid_options: raise ValueError(f"Must be one of {valid_options}")-- ใช้ ENUM หรือ CHECK constraintCREATE TABLE orders ( status ENUM('active', 'inactive', 'pending'), -- หรือ priority INT CHECK (priority BETWEEN 1 AND 5));Number & Date Ranges
Section titled “Number & Date Ranges”จำกัดช่วงตัวเลข
Section titled “จำกัดช่วงตัวเลข”- Data > Data validation > Add rule
- Criteria: Is between → ใส่ Min/Max
| ตัวอย่าง | Criteria | ค่า |
|---|---|---|
| คะแนน 0-100 | Is between | 0 and 100 |
| ราคา > 0 | Is greater than | 0 |
| จำนวนเต็มเท่านั้น | Is valid number + Custom | =INT(A1)=A1 |
จำกัดช่วงวันที่
Section titled “จำกัดช่วงวันที่”| ตัวอย่าง | Criteria | ค่า |
|---|---|---|
| วันในอนาคตเท่านั้น | Is after | today |
| ปี 2025 เท่านั้น | Is between | 1/1/2025 and 31/12/2025 |
#include <stdio.h>int validate_score(int score) { return score >= 0 && score <= 100;}int main() { int score = 85; if (!validate_score(score)) printf("Invalid score!\n"); return 0;}def validate_score(score: int) -> bool: if not 0 <= score <= 100: raise ValueError("Score must be between 0 and 100") return TrueALTER TABLE studentsADD CONSTRAINT chk_score CHECK (score BETWEEN 0 AND 100);Custom Formula Validation
Section titled “Custom Formula Validation”Custom Formula ให้ความยืดหยุ่นสูงสุด — เขียนสูตรที่ return TRUE/FALSE:
ตัวอย่างสูตร Custom
Section titled “ตัวอย่างสูตร Custom”=LEN(A1)=13 → ต้องยาว 13 ตัวอักษร (เลขบัตร ปชช.)=ISNUMBER(A1) → ต้องเป็นตัวเลขเท่านั้น=REGEXMATCH(A1,"^[a-zA-Z]+@") → ต้องขึ้นต้นด้วยตัวอักษร+@=A1<>"" → ห้ามเว้นว่าง=COUNTIF(A:A,A1)=1 → ห้ามซ้ำในคอลัมน์ตั้งค่า Reject vs Warning
Section titled “ตั้งค่า Reject vs Warning”| โหมด | พฤติกรรม |
|---|---|
| Reject input | ไม่ยอมให้ใส่ค่าที่ไม่ผ่าน |
| Show warning | ให้ใส่ได้แต่แสดงเตือน (สามเหลี่ยมสีส้ม) |
#include <stdio.h>#include <string.h>int validate_thai_id(const char *id) { if (strlen(id) != 13) return 0; for (int i = 0; i < 13; i++) if (id[i] < '0' || id[i] > '9') return 0; return 1;}import redef validate_email(email: str) -> bool: pattern = r'^[a-zA-Z][a-zA-Z0-9.]*@[a-zA-Z0-9]+\.[a-zA-Z]{2,}$' return bool(re.match(pattern, email))-- Custom check ด้วย triggerDELIMITER //CREATE TRIGGER validate_id BEFORE INSERT ON usersFOR EACH ROW BEGIN IF CHAR_LENGTH(NEW.thai_id) <> 13 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Thai ID must be 13 digits'; END IF;END //| Validation Type | ใช้เมื่อ |
|---|---|
| Dropdown | มีตัวเลือกจำกัด เช่น สถานะ, ประเภท |
| Number Range | ค่าต้องอยู่ในช่วงที่กำหนด |
| Date Range | วันที่ต้องอยู่ในช่วงที่กำหนด |
| Custom Formula | เงื่อนไขซับซ้อน เช่น ห้ามซ้ำ, Regex |