检查字符串后面是否有整数

  • 本文关键字:是否 整数 字符串 php
  • 更新时间 :
  • 英文 :


所以我想检查我的输入字段是否包含特定的字符和整数。我唯一接受的值是这样的"KM00000"。必须以KM开头,后跟5个字符的整数。要检查字符串是否以字母'KM'开头,我可以这样做

if (substr($fm_id, 0, 2) !== "KM") {
die("<script>alert('ID is in the wrong format.');
window.history.back();</script>");
} 

但是我不知道如何检查字母"KM"后面的字符后面是否跟一个整数

function check_classic($input) {
if( strlen($input) !== 7 ) {
return false;
}
if( substr($input, 0, 2) !== 'KM' ) {
return false;
}
for( $i=0,$c=5,$s=substr($input, 2, 5); $i<$c; ++$i ) {
$ord = ord($s[$i]);
// ord('0') == 48, ord('9') == 57
if( $ord < 48 || $ord > 57 ) {
return false;
}
}
return true;
}
function check_regex($input) {
return preg_match('/^KMd{5}$/', $input);
}
$inputs = [ 'KM12345', 'KM1234', 'KM123456', 'KM1234v' ];
foreach($inputs as $input) {
printf("Classic: %-8s %sn", $input, check_classic($input) ? 'true' : 'false');
printf("Regex:   %-8s %sn", $input, check_regex($input)   ? 'true' : 'false');
}

输出:

Classic: KM12345  true
Regex:   KM12345  true
Classic: KM1234   false
Regex:   KM1234   false
Classic: KM123456 false
Regex:   KM123456 false
Classic: KM1234v  false
Regex:   KM1234v  false

虽然正则表达式的代码行数肯定更少,但它是一种不同的特定于领域的语言。另外,我认为展示"经典"很重要。也是解决问题的一种方法,这大致就是正则表达式在底层所做的事情。

裁判:

  • https://www.php.net/manual/en/function.ord.php
  • https://www.php.net/manual/en/reference.pcre.pattern.syntax.php

最新更新