我有一个字符串,我想循环检测是否每个字符都是一个字母或数字。

$s = "abc123 678bef";

for ($i=1; $i<=strlen($s); $i++){
   if (is_letter($a[$i-1])){
      echo $a[$i-1]." is a letter";
   } else if(is_number($a[$i-1]) {
      echo $a[$i-1]." is a number";
   }
}

php中有没有类似的方法或者其他解决办法?

 

PHP专门提供了一个字符类型检测的内置扩展:ctype ,并提供了下面这些方法:

ctype_alnum — 做字母和数字字符检测
ctype_alpha — 做纯字符检测
ctype_cntrl — 做控制字符检测
ctype_digit — 做纯数字检测
ctype_graph — 做可打印字符串检测,空格除外
ctype_lower — 做小写字符检测
ctype_print — 做可打印字符检测
ctype_punct — 检测可打印的字符是不是不包含空白、数字和字母
ctype_space — 做空白字符检测
ctype_upper — 做大写字母检测
ctype_xdigit — 检测字符串是否只包含十六进制字符

所以上面问题可以使用ctype_alphactype_digit来进行检测。

另外PHP中提供了一个用来检测数字或数字字符串的方法:is_numeric ,这个方法用来检测单个字符是否是数字是没问题的,如果检测一个字符串是否全部是数字字符就有问题,比如下面情况会返回true:

is_numeric(9.1); //true

当然还有一种方法是直接使用正在表达式:

//测试是否是纯数字
if (preg_match('/\d/', $char)) :
     echo $char.' is a number';
endif;
//测试是否是纯字符
if (preg_match('/[a-zA-Z]/', $char)) :
     echo $char.' is a letter';
endif;