首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 正則表達式驗證數字:完整模式大全

     編輯:PHP 相關知識

核心數字驗證模式

類型正則模式說明匹配示例
正整數^[1-9]\d*$非零開頭1, 123
負整數^-[1-9]\d*$-1, -123
整數(含0)^-?([1-9]\d*|0)$0, -10, 100
非負整數^\d+$0 和正整數0, 123
非正整數^(-?\d+)?$ 或 ^((-\d+)|0)$0 和負整數0, -123
正浮點數^(([1-9]\d*\.\d*|0\.\d*[1-9]\d*)|[1-9]\d*)$含小數點,值>01.23, 0.5, 10
負浮點數^(-(([1-9]\d*\.\d*|0\.\d*[1-9]\d*)|[1-9]\d*))$值<0-1.23, -0.5
浮點數(含0)^-?(\d+\.\d+|\d+)$簡化版0, 1.5, -2.0
非負浮點數^\d+(\.\d+)?$0, 10, 3.14
非正浮點數^((-\d+(\.\d+)?)|0)$0, -10, -3.14

長度與小數位限制

需求正則示例
n 位數字^\d{n}$^\d{6}$ 匹配 123456
至少 n 位^\d{n,}$^\d{3,}$ 匹配 123, 1234
m-n 位^\d{m,n}$^\d{3,6}$
兩位小數正實數^\d+(\.\d{2})?$10.00, 5
1-3 位小數^\d+(\.\d{1,3})?$10.1, 5.123
金額格式(分隔符)^\d{1,3}(,\d{3})*(\.\d{2})?$1,000.00

PHP 實戰驗證函數

<?php
function validateNumber($value, string $type = 'float', array $options = []): bool {
    $patterns = [
        'int'        => '^-?\d+$',
        'uint'       => '^\d+$',
        'float'      => '^-?\d+(\.\d+)?$',
        'ufloat'     => '^\d+(\.\d+)?$',
        'positive'   => '^[1-9]\d*$',
        'negative'   => '^-[1-9]\d*$',
    ];
    
    $pattern = $patterns[$type] ?? $type; // 允許傳入自定義正則
    
    // 附加長度限制
    if (isset($options['min'])) {
        $pattern = "(?=.{$options['min']},)" . $pattern;
    }
    if (isset($options['max'])) {
        // 需結合 lookahead 處理,此處略
    }
    
    return (bool)preg_match("/$pattern/", $value);
}

// 使用
var_dump(validateNumber('123', 'uint'));        // true
var_dump(validateNumber('-10.5', 'float'));     // true
var_dump(validateNumber('0.00', 'ufloat'));     // true
var_dump(validateNumber('abc', 'int'));         // false
?>

前端輸入限制(HTML5 + JS)

<!-- 僅允許數字和小數點 -->
<input type="text" 
       inputmode="decimal" 
       pattern="\d+(\.\d+)?"
       oninput="value=value.replace(/[^\d.]/g,'').replace(/\.{2,}/g,'.')"
       placeholder="請輸入數字">

避坑提醒

  1. ^$ 空字符串會匹配 ^\d*$,用 ^\d+$ 要求至少一位。
  2. 浮點數 . 需轉義 \.,否則匹配任意字符。
  3. 大數字超出 PHP 整數範圍(64位約 9e18)時,正則仍通過但轉換為 float 會失精度,需用 bcmath 或 gmp。
  4. 千分位分隔符、科學計數法、貨幣符號等複雜格式,建議用專用庫(如 moneyphp/money)。

總結

根據業務場景選擇嚴格程度:整數用 ^\d+$ 系、浮點數用 ^\d+(\.\d+)?$ 系、金額嚴格限制小數位。PHP 端驗證不可缺失,前端僅為體驗增強。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved