2011-06-07 125 views
12

我試圖找到一個快速簡單的方法來檢查字符串中的第一個字母是否是一個數字。我在S.O上看到的許多功能和方法似乎過於複雜。我想知道,會是這樣的工作:第一個字母是字符串中的數字

is_numeric($string[0]); 
+6

你可以自己測試一下你知道的...... – 2011-06-07 10:09:30

+0

TIAS,它有什麼作用? – 2011-06-07 10:10:59

+0

它應該工作。 – 2011-06-07 10:12:15

回答

16

一個簡單的方法可能是:

is_numeric(substr($string, 0, 1)) 

它通過使用substr()來解決可能的空字符串(沒有第一個字符)的問題。 substr()在空字符串的情況下返回falsefalse不被is_numeric()識別爲數字。

3

是的,這是做一個乾淨的方式,而是用ctype_digit替代,因爲它只允許數字0到9,沒有別的。

5

不,那不行。您可能會收到「注意:未初始化的字符串偏移量:0」通知。爲了使其工作,加strlen()

if (strlen($string) > 0 && is_numeric($string[0])) { 
} 
+1

+1'strlen' test – 2013-04-27 18:57:03

1

它不會對空字符串,所以你應該檢查彌補以前訪問它:

$result = isset($string[0]) ? is_numeric($string[0]) : false; 
+0

不,不,爲什麼要這樣?這就是isset()的用途。只有當'$ string [0]'被設置時,纔會被訪問 - 對於空字符串不是這種情況。 – hakre 2011-06-07 21:39:09

6

我不知道爲什麼的答案被刪除,但正確答案是

preg_match('/^\d/', $string); 

爲什麼?因爲它提供了一個標準的方式來查詢字符串。通常情況下,您必須在您的應用程序中回答許多類似的問題:

  • 是否以字符開頭?
  • 它是否只包含數字?
  • 它以字母結尾嗎?
  • 它包含特定的子字符串嗎?

等等,等等。沒有你不得不創造的每個案例的字符串函數的不同組合,而提供的RE統一和標準的接口,您只需再利用一遍又一遍的正則表達式。這就像代數與算術相比。

+2

OP說「我在S.O上看到的很多功能和方法似乎過於複雜」,是不是這些「過於複雜」的? – mr5 2014-02-26 08:54:56

+0

你不使用logarifm在兩個孩子之間分裂幾個蘋果,對吧?當你編碼時,簡單 - 越好,越短 - 越好,越快越好。雖然RE不是簡單,快速和簡短的用法。 – 2016-12-12 13:14:48

相關問題