我需要验证我的字符串$path
是否正好包含8个字符,并且$path
的格式如下:A000AA00
其中A是任何字母AZ,0是任何数字0- 9。
我做的第一件事是我使用strlen
来获取字符串长度。
if (strlen($path) !== 8) { die('Bad string length'); }
接下来,我根据期望的ctype_alpha
使用ctype_digit
和$path[0-7]
来检查字符串是否符合我想要的格式。
if (ctype_alpha($path[0]) && ctype_digit($path[1]) && ctype_digit($path[2]) && ctype_digit($path[3]) && ctype_alpha($path[4]) && ctype_alpha($path[5]) && ctype_digit($path[6]) && ctype_digit($path[7])) { // We good }
我可以以某种方式改进此代码吗?
有没有更快的选择?
答案 0 :(得分:0)
如果您打算使用正则表达式来验证这种模式,则可以尝试
preg_match('~^[A-Z]\d{3}[A-Z]{2}\d{2}\z~', $s)
regex方法非常易读:以大写字母,3位数字,2个大写字母,2位数字,字符串的结尾开头。
现在,
$path = "A000AA00";
$startA = microtime(true);
for($i = 0; $i < 100000; $i++)
{
if (strlen($path) !== 8) { die('Bad string length'); }
if (ctype_alpha($path[0]) && ctype_digit($path[1]) && ctype_digit($path[2]) && ctype_digit($path[3]) && ctype_alpha($path[4]) && ctype_alpha($path[5]) && ctype_digit($path[6]) && ctype_digit($path[7])) { // We good
}
}
$endA = microtime(true);
echo $endA-$startA;
yields 0.02226710319519
(PHP 7.3.2),以及基于正则表达式的解决方案yields 0.0064888000488281
。