Validate số bằng regex tùy vào yêu cầu: số nguyên dương, số thực, độ dài cố định, range giá trị...
1. Validate số chính xác (Exact match)
import re
# Chỉ khớp chính xác '2018'
pattern = r'\b2018\b'
print(re.match(pattern, '2018').group()) # 2018
print(re.match(pattern, '20181')) # None (word boundary)
2. Validate số nguyên dương 5 chữ số (10000 - 99999)
# (?8} -> {m.group() if m else "Invalid"}')
Kết quả
2346 -> Invalid (chỉ 4 chữ số)
56789 -> 56789
01234 -> Invalid (dẫn 0)
-12345 -> Invalid (âm)
123456 -> Invalid (6 chữ số)
3. Các pattern validate phổ biến
| Loại số | Regex Pattern | Ví dụ hợp lệ |
|---|---|---|
| Số nguyên dương | ^[1-9]\d*$ | 1, 42, 1000 |
| Số nguyên (có âm) | ^-?[1-9]\d*$|^0$ | -5, 0, 100 |
| Số thực (có dấu) | ^[+-]?(\d+\.\d*|\.\d+|\d+)([eE][+-]?\d+)?$ | 3.14, -.5, 1e-3 |
| Số tiền (2 decimals) | ^\d+(\.\d{2})?$ | 100, 99.99 |
| Percentage 0-100 | ^(100|[1-9]?\d)(\.\d+)?$ | 50, 99.5, 100 |
| IPv4 octet | ^(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$ | 0-255 |
4. Validate bằng Python (không regex) - Thường tốt hơn
def is_positive_int(s):
try:
return int(s) > 0 and str(int(s)) == s # không dẫn 0
except ValueError:
return False
def is_float_in_range(s, min_v, max_v):
try:
v = float(s)
return min_v <= v <= max_v
except ValueError:
return False
Khuyến nghị: Dùng try/except float/int cho validation logic, regex chỉ cho format validation đơn giản.