簡體   English   中英

正則表達式使用PHP,任何包含數字0-9的非零數字

[英]Regex using PHP, any non-zero number containing the digits 0-9

我有這個正則表達式:

/^[0-9]+$/i

在此代碼中使用:

preg_match('/^[0-9]+$/i', $var);

我希望以下內容為真:$ var = 1; $ var = 50; $ var = 333;

以下是假的:$ var = 0; $ var = 01; $ var ='abc';

我認為到目前為止我的工作除了“0”部分..?

我瀏覽了這個指南( http://www.phpf1.com/tutorial/php-regular-expression.html ),但無法得出完整的答案。

任何幫助將不勝感激,謝謝!

/^[1-9][0-9]*$/

意思是:非零數字后跟任意數字的數字(包括零)。

只檢查一個非零數字,然后檢查任意數量的其他數字

preg_match('/^[1-9][0-9]*$/', $var);

有幾種方法可以做到這一點:

/^[1-9][0-9]*$/

要么

/^(?!0)[0-9]+$/

這些中的任何一個都應該沒問題。 第一個應該或多或少是不言自明的,第二個使用零寬度負前瞻斷言來確保第一個數字不是0。

請注意,正則表達式不是為數值解析而設計的。 還有其他方法可以在數字格式方面更快,更靈活。 例如:

if (is_numeric($val) && $val != 0)

...應該選取任何非零數字,包括小數和科學記數法。

您可以通過使用'/^[1-9][0-9]*$/'強制第一個數字與0不同來解決此問題

列出例子:

foreach (array('1', '50', '333', '0', '01', 'abc') as $var) {
  echo $var.': '.(preg_match('/^[1-9][0-9]*$/', $var) ? 'true' : 'false')."\n";
}

此腳本提供以下結果:

$ php test.php
1: true
50: true
333: true
0: false
01: false
abc: false

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM