PHP ตรวจสอบค่าสำหรับ int การตรวจสอบนิพจน์ทั่วไปสำหรับตัวเลข ตรวจสอบว่าตัวแปรเป็นจำนวนเต็มใน PHP หรือไม่

จากผู้เขียน: สวัสดีเพื่อนๆ ในบทความนี้ เราจะเริ่มศึกษาความสามารถของนิพจน์ทั่วไปโดยตรง ทำความคุ้นเคยกับฟังก์ชัน preg_match() ใน PHP และสร้างนิพจน์ทั่วไปตัวแรกเพื่อตรวจสอบตัวเลข

อาจคุ้มค่าที่จะเริ่มต้นบทความนี้โดยที่นิพจน์ทั่วไปเป็นเครื่องมือที่ทรงพลังมากในการทำงานกับข้อความ ดังที่คุณทราบอยู่แล้วว่าด้วยความช่วยเหลือของนิพจน์ทั่วไป เราสามารถค้นหาอะไรก็ได้ที่อยู่ในอาร์เรย์ของข้อความ อย่างไรก็ตาม อำนาจดังกล่าวไม่ควรถูกใช้ในทางที่ผิด อย่าลืมว่า PHP มีฟังก์ชันมากมายสำหรับการทำงานกับสตริง ประเภท และอื่นๆ ซึ่งช่วยให้เราสามารถตรวจสอบการมีอยู่ของอักขระหรือสตริงย่อยในสตริงได้

ดังนั้น หากเป็นไปได้ที่จะแก้ปัญหาโดยไม่ใช้นิพจน์ทั่วไป ก็คุ้มค่าที่จะใช้โอกาสนี้ เนื่องจากฟังก์ชันสำหรับการทำงานกับนิพจน์ทั่วไปมักจะใช้ทรัพยากรมากกว่า ในกรณีนี้ ปัญหาสามารถแก้ไขได้โดยไม่ต้องใช้นิพจน์ทั่วไป ตัวอย่างเช่น คุณสามารถตรวจสอบว่าอักขระทั้งหมดในสตริงเป็นตัวเลขหรือไม่โดยใช้ฟังก์ชัน ctype_digit()

แต่ตามเงื่อนไขของงานในบทความ เราจำเป็นต้องใช้นิพจน์ทั่วไป ดังนั้นเราจะแก้ปัญหาโดยใช้ฟังก์ชัน preg_match() ฟังก์ชันนี้จะตรวจสอบสตริงกับรูปแบบนิพจน์ทั่วไป ฟังก์ชั่นนี้มี 5 พารามิเตอร์ ซึ่งในทางปฏิบัติจะใช้เพียง 2 ตัวแรกเท่านั้น

พารามิเตอร์แรกของฟังก์ชันจะเป็นรูปแบบนิพจน์ทั่วไป ประการที่สองคือสตริงที่กำลังตรวจสอบ บางครั้งเราอาจต้องการพารามิเตอร์ตัวที่สาม โดยระบุว่าเราจะรับอาร์เรย์พร้อมกับผลการค้นหาตัวใด

มาสร้างเทมเพลตแรกของเรากัน อาจมีลักษณะเช่นนี้:

$รูปแบบ = "#^+$#";

$รูปแบบ = "#^+$#" ;

เมื่อมองแวบแรกอาจดูเข้าใจยากและค่อนข้างน่ากลัว อย่างไรก็ตามไม่มีอะไรน่ากลัวที่นี่ตอนนี้เรามาดูกันดีกว่า เริ่มต้นด้วยความจริงที่ว่านิพจน์ทั่วไปใช้อักขระพิเศษที่เรียกว่า อักขระเมตา มีจำนวนมากในเทมเพลตของเรา:

^ — metaCharacter สำหรับจุดเริ่มต้นของบรรทัด

$ - เมตาอักขระจุดสิ้นสุดของบรรทัด

- metaตัวละครคลาสตัวละคร

+ เป็นตัวระบุปริมาณที่แสดงถึงอักขระหรือกลุ่มอักขระ 1 รายการขึ้นไปที่ตามด้วยตัวระบุ

แล้วเราได้อะไร? คุณจะอ่านรูปแบบนิพจน์ทั่วไปที่ประกอบด้วยได้อย่างไร และมันอ่านดังนี้:

สตริงทั้งหมดจะได้รับการตรวจสอบตั้งแต่ต้นจนจบ (อักขระเมตา ^$)

บรรทัดสามารถมีได้เฉพาะตัวเลขตั้งแต่ 0 ถึง 9 ()

บรรทัดจะต้องมีอย่างน้อยหนึ่งหลัก (+)

ตอนนี้เรามาตรวจสอบเทมเพลตที่ใช้งานจริงกัน

อย่างที่คุณเห็น นิพจน์ทั่วไปทำงานได้อย่างถูกต้อง เฉพาะบรรทัดที่ประกอบด้วยตัวเลขทั้งหมดเท่านั้นจึงจะพอดี อย่างไรก็ตามหากคุณกำลังทดสอบบนเว็บไซต์ regexr.com และมีข้อความมากกว่าหนึ่งบรรทัดคุณจะต้องระบุแฟล็กพิเศษสำหรับเทมเพลต - m ซึ่งจะช่วยให้เทมเพลตทำงานกับหลายบรรทัดได้ ข้อความบรรทัด คุณสามารถทำได้ที่มุมขวาบน แฟล็กรายการเมนู

โปรดทราบว่าจะเกิดอะไรขึ้นหากเราลบอักขระเมตาเริ่มต้นและ/หรือจุดสิ้นสุดของบรรทัด:

ตอนนี้เราไม่ได้ตรวจสอบความถูกต้องของบรรทัดทั้งหมด แต่เพียงมองหาบางสิ่งบางอย่างในบรรทัด เป็นผลให้พบตัวเลขในบรรทัดที่สามแม้ว่าบรรทัดนี้ไม่เหมาะกับเราตามเงื่อนไขของปัญหาก็ตาม ตอนนี้ลองใช้ฟังก์ชัน preg_match และตรวจสอบแต่ละบรรทัดทีละบรรทัด:

$arr = ["123", "ทดสอบ", "45ew45", "456"]; $รูปแบบ = "#^+$#"; foreach($arr เป็น $item)( if(preg_match($pattern, $item))( echo "

สตริง $item มีเพียงตัวเลขเท่านั้น

"; )else( เสียงสะท้อน "

บรรทัด $item ไม่เหมาะสม

"; } }

$arr = [ "123" , "ทดสอบ" , "45ew45" , "456" ] ;

$รูปแบบ = "#^+$#" ;

foreach ($arr เป็น $item) (

ขณะนี้งานที่กำลังดำเนินการอยู่บนเว็บไซต์เพื่อเปิดตัวส่วนใหม่ และเมื่อเขียนสคริปต์จำเป็นต้องตรวจสอบตัวแปรเพื่อหาตัวเลข และไม่ใช่แค่ตัวเลข (เพราะว่า 1.5 ก็เป็นตัวเลขด้วย) แต่เป็นจำนวนเต็มด้วย และนี่คือวิธีที่ฉันทำเช็คนี้

ตรวจสอบว่าตัวแปรเป็นจำนวนเต็มใน PHP หรือไม่

หากต้องการตรวจสอบใน PHP ว่าตัวเลขเป็นจำนวนเต็มหรือไม่ เราใช้นิพจน์ทั่วไป:

ดังนั้น หากตัวแปรเป็นจำนวนเต็ม เราจะดำเนินการตามที่เราต้องการและในทางกลับกัน

การตรวจสอบว่าตัวแปรเป็นจำนวนเต็มใน JavaScript หรือไม่

ใน JavaScript สิ่งต่างๆ จะแตกต่างออกไปเล็กน้อย และที่นี่เราต้องเขียนฟังก์ชันเล็กๆ ของเราเอง:

ฟังก์ชั่น number_scan(num) ( return (num ^ 0) === num; )

และใช้สำหรับการทดสอบ:

ฟังก์ชั่น number_scan(num) ( return (num ^ 0) === num; ) var number = "1.3";

if(number_scan(number)) ( // การกระทำหากตัวเลขเป็นจำนวนเต็ม) else ( // การกระทำหากตัวเลขเป็นเศษส่วนหรือตัวแปรไม่ใช่ตัวเลขเลย)

ในกรณีนี้ หากตัวแปรเท่ากับจำนวนเต็ม การกระทำที่คุณต้องการจะถูกดำเนินการและในทางกลับกัน

สคริปต์แสดงรายการราคาในร้านค้าสำหรับผลิตภัณฑ์ผลิตภัณฑ์ พารามิเตอร์หน้าทางเลือกระบุหมายเลขหน้า หากไม่ได้ระบุหน้าและ URL ดูเหมือน http://example.com/price.php?product=859844 เราจะแสดงหน้าแรก

ก่อน PHP 5.2.0 ปัญหาสามารถแก้ไขได้ด้วยวิธีง่ายๆ นี้

// ฟังก์ชันสำหรับรับพารามิเตอร์ที่เป็นตัวเลขธรรมชาติ // $arr = อาร์เรย์ของพารามิเตอร์ ($GET หรือ $POST), $name = ชื่อของพารามิเตอร์ // ฟังก์ชันส่งคืนค่าของพารามิเตอร์ หรือ $default หากพารามิเตอร์หายไปหรือฟังก์ชันไม่ถูกต้อง get_param_nat($ arr, $name, $default=null) ( if (!isset($arr[$name])) return $default; // ตรวจสอบด้วยวิธีที่ง่ายมาก แปลงค่า พารามิเตอร์เป็นตัวเลข จากนั้นกลับไปที่สตริง // หากทุกอย่างเรียบร้อยดี สตริงผลลัพธ์จะต้องตรงกับค่าดั้งเดิมของพารามิเตอร์ $val = $arr[$name]; $intval = intval($val); เราตรวจสอบว่าตัวเลขที่เรามีมากกว่าศูนย์ 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);

เริ่มต้นในเวอร์ชัน 5.2.0 กลุ่มฟังก์ชันตัวกรองปรากฏใน PHP: filter_var, filter_input, filter_var_array และอื่นๆ อีกมากมาย ฟังก์ชันสามารถตรวจสอบตัวแปรสำหรับจำนวนเต็ม หมายเลขทศนิยม อีเมล ที่อยู่ IP URL ฯลฯ และยังล้างสตริงตามพารามิเตอร์ที่ระบุอีกด้วย

มาเขียนโค้ดใหม่โดยใช้ฟังก์ชัน filter_input

ฟังก์ชั่น 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 ส่งคืน false หากกรอง ล้มเหลว หรือเป็นโมฆะ หากไม่ได้กำหนดตัวแปร if ($val === null || $val === false) return $default; return $val ) // ตรวจสอบพารามิเตอร์ผลิตภัณฑ์ if (($product = get_param_nat(INPUT_GET) , "ผลิตภัณฑ์")) === null) die("ไม่พบผลิตภัณฑ์"); // รับหมายเลขหน้า $page = get_param_nat(INPUT_GET, "page", 1);

การทดสอบเล็กน้อยแสดงให้เห็นว่าความเร็วของการทำงานของฟังก์ชัน get_param_nat ทั้งสองตัวแปรนั้นเกือบจะเท่ากัน และในกรณีที่ไม่มีพารามิเตอร์ เช่น ไม่ได้ระบุหน้า ตัวแปรแรกจะทำงานเร็วขึ้นอีกเล็กน้อย

ดังนั้นมันขึ้นอยู่กับคุณที่จะตัดสินใจว่าจะใช้อะไร ฉันใช้ฟังก์ชันแรกเป็นการส่วนตัว มันใกล้กว่าและชัดเจนกว่าสำหรับฉัน

การพูดนอกเรื่องโคลงสั้น ๆ ในตอนท้าย เพื่อหลีกเลี่ยงการทำซ้ำหน้าสำหรับเครื่องมือค้นหา เช่น ไม่มีหน้าและมี page=1 ฉันขอแนะนำให้ระบุ URL ตามรูปแบบบัญญัติในส่วนหัวของหน้า มันจะมีลักษณะดังนี้:

...