2011-06-07 97 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

相关问题