Kiểm tra một biến cho một số php. Xác thực tham số số trong PHP

Ví dụ: lấy địa chỉ này: http://example.com/price.php?product=859844&page=99.

Tập lệnh hiển thị danh sách giá trong các cửa hàng cho sản phẩm, tham số trang tùy chọn chỉ định số trang. Nếu trang không được chỉ định và url trông giống như http://example.com/price.php?product=859844, sau đó hiển thị trang đầu tiên.

Trước PHP 5.2.0, vấn đề có thể được giải quyết theo cách đơn giản này.

// Hàm lấy tham số là số tự nhiên // $arr = mảng tham số ($GET hoặc $POST), $name = tên tham số, // Hàm trả về giá trị của tham số hoặc $default nếu tham số bị thiếu hoặc không hợp lệ function get_param_nat($arr, $name, $default=null) ( if (!isset($arr[$name])) return $default; // Ta kiểm tra một cách rất đơn giản, chuyển đổi tham số đến một số, sau đó quay lại một chuỗi // Nếu mọi thứ đều ổn, thì chuỗi kết quả phải khớp với giá trị ban đầu của tham số $val = $arr[$name]; $intval = intval($val); // Kiểm tra nếu số đó lớn hơn 0 if (strval($intval) != = $val || $intval< 1) return $default; return $intval; } // Проверяем параметр product if (($product = get_param_nat($_GET, "product")) === null) die("Product not found"); // Получаем номер страницы $page = get_param_nat($_GET, "page", 1);

Bắt đầu từ phiên bản 5.2.0, một nhóm hàm Bộ lọc đã xuất hiện trong PHP: filter_var, filter_input, filter_var_array và một số hàm khác. Các hàm có thể kiểm tra các biến cho số nguyên, số dấu phẩy động, e‑mail, địa chỉ ip, url, v.v., cũng như xóa các chuỗi theo tham số đã cho.

Hãy viết lại mã bằng hàm filter_input.

Hàm get_param_nat($type, $name, $default=null) ( $val = filter_input($type, FILTER_VALIDATE_INT, array("min_range" => 1, "max_range" => PHP_INT_MAX)); // filter_input trả về false nếu lọc không thành công hoặc null nếu biến không được xác định if ($val === null || $val === false) return $default; return $val; ) // Kiểm tra tham số sản phẩm if (($product = get_param_nat(INPUT_GET , "sản phẩm")) === null) die("Không tìm thấy sản phẩm"); // Lấy số trang $page = get_param_nat(INPUT_GET, "page", 1);

Một thử nghiệm nhỏ cho thấy hai phiên bản của hàm get_param_nat gần như giống nhau về tốc độ và nếu không có tham số nào, chẳng hạn như trang không được chỉ định, phiên bản đầu tiên sẽ hoạt động thậm chí còn nhanh hơn một chút.

Vì vậy, tùy thuộc vào bạn để quyết định những gì để sử dụng. Cá nhân tôi sử dụng chức năng đầu tiên, nó gần gũi và dễ hiểu hơn đối với tôi.

Chà, một sự lạc đề trữ tình nhỏ ở cuối. Để tránh trùng lặp trang cho các công cụ tìm kiếm, chẳng hạn như không có trang và có trang=1, tôi khuyên bạn nên chỉ ra url chính tắc trong phần đầu của trang. Nó sẽ trông giống như thế này:

... "> ...

Từ tác giả: xin chào các bạn. Trong bài viết này, chúng ta sẽ trực tiếp bắt đầu nghiên cứu khả năng của biểu thức chính quy, làm quen với hàm preg_match() trong PHP, đồng thời soạn biểu thức chính quy đầu tiên để kiểm tra một số.

Có lẽ đáng để bắt đầu bài viết với thực tế là các biểu thức chính quy là một công cụ rất mạnh để làm việc với văn bản. Như bạn đã biết, với sự trợ giúp của các biểu thức chính quy, chúng ta có thể tìm thấy mọi thứ theo đúng nghĩa đen trong một mảng văn bản. Tuy nhiên, sức mạnh này không nên bị lạm dụng. Đừng quên rằng PHP cung cấp cho chúng ta rất nhiều hàm để làm việc với chuỗi, kiểu, v.v., cho phép chúng ta kiểm tra, chẳng hạn như sự hiện diện của một ký tự hoặc chuỗi con nhất định trong một chuỗi.

Do đó, nếu có thể giải quyết vấn đề mà không liên quan đến các biểu thức chính quy, thì bạn nên tận dụng cơ hội này, vì các hàm để làm việc với các biểu thức chính quy thường tốn nhiều tài nguyên hơn. Trong trường hợp này, vấn đề có thể được giải quyết mà không cần biểu thức chính quy. Ví dụ: bạn có thể kiểm tra xem tất cả các ký tự trong một chuỗi có phải là số hay không bằng cách sử dụng hàm ctype_digit().

Nhưng theo điều kiện của bài toán đặt ra trong bài, chúng ta cần sử dụng biểu thức chính quy nên chúng ta sẽ giải bài toán bằng cách sử dụng hàm preg_match(). Hàm này kiểm tra một chuỗi theo mẫu biểu thức chính quy. Hàm có 5 tham số, trong đó thực tế chỉ có 2 tham số đầu tiên hầu như luôn được sử dụng.

Tham số đầu tiên của hàm sẽ là mẫu biểu thức chính quy. Thứ hai là chuỗi cần kiểm tra. Đôi khi có thể cần tham số thứ ba, chỉ định tham số nào chúng ta sẽ nhận được một mảng có kết quả tìm kiếm.

Hãy tạo mẫu đầu tiên của chúng tôi. Nó có thể trông như thế này:

$pattern = "#^+$#";

$pattern = "#^+$#" ;

Thoạt nhìn, nó có vẻ khó hiểu và hơi đáng sợ. Tuy nhiên, không có gì sai ở đây, bây giờ chúng ta sẽ phân tích nó. Hãy bắt đầu với thực tế là các biểu thức chính quy tích cực sử dụng các ký tự đặc biệt, cái gọi là. siêu ký tự. Có rất nhiều trong số chúng trong mẫu của chúng tôi:

^ - ký tự đại diện cho đầu dòng

$ - ký tự cuối dòng

- siêu ký tự lớp nhân vật

+ là lượng từ chỉ 1 hoặc nhiều lần xuất hiện của một ký tự hoặc một nhóm ký tự theo sau bởi một lượng từ.

Vì vậy, những gì chúng ta đã nhận được? Làm thế nào bạn có thể đọc một mẫu biểu thức chính quy được biên dịch? Và nó đọc như thế này:

chuỗi sẽ được xác thực toàn bộ, từ đầu đến cuối (^$ ký tự đại diện)

chuỗi chỉ có thể chứa các số từ 0 đến 9 ()

phải có ít nhất một chữ số (+) trong chuỗi

Bây giờ hãy kiểm tra hoạt động của mẫu.

Như bạn có thể thấy, biểu thức chính quy hoạt động chính xác. Bên dưới nó, chỉ những dòng bao gồm hoàn toàn các con số xuất hiện. Nhân tiện, nếu bạn cũng đang thử nghiệm trên trang web regexr.com và có nhiều hơn một dòng trong văn bản, thì bạn cần chỉ định một cờ đặc biệt - m cho mẫu, điều này sẽ cho phép mẫu hoạt động với văn bản nhiều dòng . Bạn có thể làm điều này ở góc trên bên phải, cờ mục menu.

Lưu ý điều gì sẽ xảy ra nếu chúng ta loại bỏ các ký tự siêu dữ liệu bắt đầu và/hoặc kết thúc chuỗi:

Bây giờ chúng tôi không vading toàn bộ chuỗi, mà chỉ đơn giản là tìm kiếm thứ gì đó trong chuỗi. Kết quả là, các số được tìm thấy ở dòng thứ ba, mặc dù dòng này không phù hợp với chúng tôi theo điều kiện của vấn đề. Bây giờ, hãy sử dụng hàm preg_match và kiểm tra từng dòng riêng lẻ:

$arr = ["123", "test", "45ew45", "456"]; $pattern = "#^+$#"; foreach($arr as $item)( if(preg_match($pattern, $item))( echo "

Đường kẻ $item chỉ chứa số

"; ) khác( tiếng vang "

Đường kẻ $item không phù hợp

"; } }

$ mảng = [ "123" , "test" , "45ew45" , "456" ] ;

$pattern = "#^+$#" ;

foreach($arr as $item)(

Bây giờ trang web đang tích cực làm việc để ra mắt một phần mới. Và khi viết một số tập lệnh cho nó, cần phải kiểm tra các biến cho một số. Và không chỉ cho một số (xét cho cùng, 1,5 cũng là một số), mà còn cho một số nguyên. Và đây là cách tôi đã thực hiện việc kiểm tra này.

Kiểm tra xem một biến có phải là số nguyên trong PHP không

Để kiểm tra xem một số có phải là số nguyên trong PHP hay không, chúng tôi sử dụng biểu thức chính quy:

Theo đó, nếu biến là số nguyên thì ta thực hiện thao tác cần thực hiện và ngược lại.

Kiểm tra xem một biến có phải là số nguyên trong JavaScript không

Trong JavaScript, mọi thứ hơi khác một chút và ở đây chúng ta cần viết một hàm nhỏ của riêng mình:

Hàm number_scan(num) ( return (num^0) === num; )

và đã sử dụng nó để xác minh:

Ở đây cũng vậy, với một biến bằng một số nguyên, hành động bạn cần sẽ được thực hiện và ngược lại.