Hãy xem xét nhiệm vụ đơn giản này. bạn nhận được một biến từ một nguồn không xác định [biểu mẫu, cơ sở dữ liệu, v.v.] phải là một số nguyên hợp lệ. Nó có thể là một số nguyên dương hoặc âm và được lưu trữ trong một chuỗi hoặc một số nguyên, nhưng nó phải là một số nguyên thực được tạo thành từ các chữ số. Đây là danh sách kiểm tra của chúng tôi
- Chỉ xác thực số nguyên, không phải số float, chuỗi, mảng hoặc booleans
- Cho phép số nguyên dương và âm
- Không cho phép ký hiệu thập lục phân, kỹ thuật và các ký hiệu khác
- Cho phép chuỗi và int làm đầu vào
PHP cung cấp cho chúng ta các cách sau để thực hiện nhiệm vụ này gần như nhưng không hoàn toàn
5 hoặcif[ctype_digit[ltrim[[string]$int, '-']]]{ echo["This is a valid integer"]; }
6if[ctype_digit[ltrim[[string]$int, '-']]]{ echo["This is a valid integer"]; }
7if[ctype_digit[ltrim[[string]$int, '-']]]{ echo["This is a valid integer"]; }
- biểu thức chính quy
8if[ctype_digit[ltrim[[string]$int, '-']]]{ echo["This is a valid integer"]; }
9if[ctype_digit[ltrim[[string]$int, '-']]]{ echo["This is a valid integer"]; }
Giả sử bạn muốn xác thực rằng một biến phù hợp với hóa đơn. Bạn làm nghề gì?
Phản xạ đầu tiên của bạn là thử dùng
if[ctype_digit[ltrim[[string]$int, '-']]]{
echo["This is a valid integer"];
}
5, còn được gọi là if[ctype_digit[ltrim[[string]$int, '-']]]{
echo["This is a valid integer"];
}
6, nhưng bạn đã nhầm. Các hàm này sẽ trả về false cho một chuỗi, ngay cả khi nó chứa một số nguyên. Trước tiên, bạn có thể truyền chuỗi của mình thành một số nguyên bằng if[ctype_digit[ltrim[[string]$int, '-']]]{
echo["This is a valid integer"];
}
1, sau đó áp dụng if[ctype_digit[ltrim[[string]$int, '-']]]{
echo["This is a valid integer"];
}
5, nhưng vì PHP sẽ truyền khá nhiều thứ mà không gây ra lỗi, nên bạn có thể là một mảng và dù sao thì nó cũng sẽ truyền thành 0 hoặc 1Khỏe. Điều đó có ý nghĩa. Bây giờ thì sao về ________ 17?
Điều đó để lại cho chúng tôi ba lựa chọn.
if[ctype_digit[ltrim[[string]$int, '-']]]{
echo["This is a valid integer"];
}
8, if[ctype_digit[ltrim[[string]$int, '-']]]{
echo["This is a valid integer"];
}
9 và biểu thức chính quy. Sử dụng biểu thức chính quy sẽ chậm, không thể đọc được và quá mức cần thiết cho một nhiệm vụ đơn giản như vậy, vì vậy hãy xem if[ctype_digit[ltrim[[string]$int, '-']]]{
echo["This is a valid integer"];
}
8. if[ctype_digit[ltrim[[string]$int, '-']]]{
echo["This is a valid integer"];
}
8 tương đương với
1, điều này thật tuyệt, ngoại trừ việc nó không cho phép các giá trị âm và nó chỉ hoạt động với các chuỗiĐiều đó không hoàn toàn dễ đọc, vì vậy hãy thử tùy chọn cuối cùng của chúng tôi,
if[ctype_digit[ltrim[[string]$int, '-']]]{
echo["This is a valid integer"];
}
9. Có vẻ như if[ctype_digit[ltrim[[string]$int, '-']]]{
echo["This is a valid integer"];
}
9 là đối sánh gần nhất, nhưng nó không hoàn hảo vì nó cho phép
4, nhưng chặn
5 [đã sửa trong PHP 5. 4. 11],
6 và
7. Đối với hầu hết các trường hợp, có vẻ như if[ctype_digit[ltrim[[string]$int, '-']]]{
echo["This is a valid integer"];
}
9 vẫn là chức năng tốt nhất để sử dụngNếu những nhược điểm này phù hợp với bạn, thì đây là đoạn mã bạn nên sử dụng
if[filter_var[$value, FILTER_VALIDATE_INT] !== false]{
echo["This is a valid integer"];
}
Nếu bạn cũng muốn cho phép các giá trị như
5,
6 và
7, nhưng muốn chặn
4, hãy sử dụng if[ctype_digit[ltrim[[string]$int, '-']]]{
echo["This is a valid integer"];
}
8 như thế này để thay thếif[ctype_digit[ltrim[[string]$int, '-']]]{
echo["This is a valid integer"];
}
Đúng rồi. Đây là cách bạn kiểm tra một số nguyên trong PHP. Đơn giản nhỉ?
Đây là thử nghiệm nhanh mà tôi đã sử dụng trên máy chủ thử nghiệm cũ nát của mình. Như bạn có thể thấy,
if[ctype_digit[ltrim[[string]$int, '-']]]{
echo["This is a valid integer"];
}
8 là phương pháp duy nhất hoạt động 100% thời gian, mặc dù nó hoàn toàn không thể đọc được