<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 這裡是一些無關代碼示例,模擬文章開頭部分</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">exampleFunction</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-string">"這段代碼和文章內容無關,僅作示例。"</span></span><span>;
}
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">exampleFunction</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
</span><span><span class="hljs-meta"><?php</span></span><span>
<span class="hljs-comment">/**
* 如何在 PHP 中使用 is_numeric 配合 filter_var 函數處理數字驗證?
*
* 在 PHP 開發中,經常需要對用戶輸入的數據進行數字驗證,確保數據的合法性。
* 其中,is_numeric 和 filter_var 是兩個常用的函數,各有優缺點。
* 本文將介紹如何結合這兩個函數進行有效的數字驗證。
*/</span>
<span class="hljs-comment">/**
* 1. is_numeric 函數簡介
* is_numeric 用於檢測一個變量是否為數字或數字字符串(包括整數、浮點數、科學計數法)。
* 示例:
*/</span>
</span><span><span class="hljs-variable">$values</span></span><span> = [</span><span><span class="hljs-string">'123'</span></span><span>, </span><span><span class="hljs-string">'12.3'</span></span><span>, </span><span><span class="hljs-string">'1e10'</span></span><span>, </span><span><span class="hljs-string">'abc'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$values</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$val</span></span><span>) {
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_numeric</span></span><span>(</span><span><span class="hljs-variable">$val</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"'<span class="hljs-subst">{$val}</span></span></span><span>' 是數字\n";
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"'<span class="hljs-subst">{$val}</span></span></span><span>' 不是數字\n";
}
}
<span class="hljs-comment">/**
* 2. filter_var 函數簡介
* filter_var 是一個強大的過濾器函數,可用於驗證和過濾數據。
* 其中,FILTER_VALIDATE_INT 和 FILTER_VALIDATE_FLOAT 用于驗證整數和浮點數。
* 示例:
*/</span>
</span><span><span class="hljs-variable">$intVal</span></span><span> = </span><span><span class="hljs-string">'123'</span></span><span>;
</span><span><span class="hljs-variable">$floatVal</span></span><span> = </span><span><span class="hljs-string">'12.3'</span></span><span>;
</span><span><span class="hljs-variable">$invalidVal</span></span><span> = </span><span><span class="hljs-string">'12abc'</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">filter_var</span></span><span>(</span><span><span class="hljs-variable">$intVal</span></span><span>, FILTER_VALIDATE_INT)); </span><span><span class="hljs-comment">// int(123)</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">filter_var</span></span><span>(</span><span><span class="hljs-variable">$floatVal</span></span><span>, FILTER_VALIDATE_FLOAT)); </span><span><span class="hljs-comment">// float(12.3)</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">filter_var</span></span><span>(</span><span><span class="hljs-variable">$invalidVal</span></span><span>, FILTER_VALIDATE_INT)); </span><span><span class="hljs-comment">// bool(false)</span></span><span>
<span class="hljs-comment">/**
* 3. 結合 is_numeric 和 filter_var 的使用場景
* - is_numeric 能够检测是否是數字或数字字符串,範圍較廣。
* - filter_var 驗證更加嚴格,能区分整数和浮點數。
*
* 实际開發中,可以先用 is_numeric 做初步判斷,再用 filter_var 進行精確驗證。
*/</span>
<span class="hljs-comment">/**
* 4. 實際示例代碼
*/</span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">validateNumber</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$input</span></span></span><span>, </span><span><span class="hljs-variable">$type</span></span><span> = </span><span><span class="hljs-string">'any'</span></span><span>) {
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">is_numeric</span></span><span>(</span><span><span class="hljs-variable">$input</span></span><span>)) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>;
}
</span><span><span class="hljs-keyword">switch</span></span><span> (</span><span><span class="hljs-variable">$type</span></span><span>) {
</span><span><span class="hljs-keyword">case</span></span><span> </span><span><span class="hljs-string">'int'</span></span><span>:
</span><span><span class="hljs-comment">// 驗證整數</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">filter_var</span></span><span>(</span><span><span class="hljs-variable">$input</span></span><span>, FILTER_VALIDATE_INT) !== </span><span><span class="hljs-literal">false</span></span><span>;
</span><span><span class="hljs-keyword">case</span></span><span> </span><span><span class="hljs-string">'float'</span></span><span>:
</span><span><span class="hljs-comment">// 验证浮點數</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">filter_var</span></span><span>(</span><span><span class="hljs-variable">$input</span></span><span>, FILTER_VALIDATE_FLOAT) !== </span><span><span class="hljs-literal">false</span></span><span>;
</span><span><span class="hljs-keyword">case</span></span><span> </span><span><span class="hljs-string">'any'</span></span><span>:
</span><span><span class="hljs-keyword">default</span></span><span>:
</span><span><span class="hljs-comment">// 只要是數字即可</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">true</span></span><span>;
}
}
</span><span><span class="hljs-comment">// 測試用例</span></span><span>
</span><span><span class="hljs-variable">$testInputs</span></span><span> = [</span><span><span class="hljs-string">'123'</span></span><span>, </span><span><span class="hljs-string">'12.3'</span></span><span>, </span><span><span class="hljs-string">'1e3'</span></span><span>, </span><span><span class="hljs-string">'abc'</span></span><span>, </span><span><span class="hljs-string">'0'</span></span><span>, </span><span><span class="hljs-string">'-45'</span></span><span>, </span><span><span class="hljs-string">'3.14.15'</span></span><span>];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$testInputs</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$input</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"輸入 '<span class="hljs-subst">{$input}</span></span></span><span>' 驗證為整數: " . (</span><span><span class="hljs-title function_ invoke__">validateNumber</span></span><span>(</span><span><span class="hljs-variable">$input</span></span><span>, </span><span><span class="hljs-string">'int'</span></span><span>) ? </span><span><span class="hljs-string">'通過'</span></span><span> : </span><span><span class="hljs-string">'不通過'</span></span><span>) . </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"輸入 '<span class="hljs-subst">{$input}</span></span></span><span>' 验证为浮點數: " . (</span><span><span class="hljs-title function_ invoke__">validateNumber</span></span><span>(</span><span><span class="hljs-variable">$input</span></span><span>, </span><span><span class="hljs-string">'float'</span></span><span>) ? </span><span><span class="hljs-string">'通過'</span></span><span> : </span><span><span class="hljs-string">'不通過'</span></span><span>) . </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"輸入 '<span class="hljs-subst">{$input}</span></span></span><span>' 驗證為任意數字: " . (</span><span><span class="hljs-title function_ invoke__">validateNumber</span></span><span>(</span><span><span class="hljs-variable">$input</span></span><span>, </span><span><span class="hljs-string">'any'</span></span><span>) ? </span><span><span class="hljs-string">'通過'</span></span><span> : </span><span><span class="hljs-string">'不通過'</span></span><span>) . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
<span class="hljs-comment">/**
* 5. 總結
* - 使用 is_numeric 可以快速判斷字符串是否為數字格式。
* - filter_var 提供了更細粒度的數字類型驗證。
* - 两者結合使用,能提高數字驗證的準確性和靈活性。
*/</span>
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>