我正在尝试实现以下功能。这里使用某种类型的正则表达式最好吗?我也需要捕获这个数字。
function endsWithNumber($string) {
$endsWithNumber = false;
// Logic
return $endsWithNumber;
}
答案 0 :(得分:21)
return is_numeric(substr($string, -1, 1));
这只检查字符串中的最后一个字符是否为数字,如果要捕获并返回多位数字,则可能必须使用正则表达式。
一个合适的正则表达式是/[0-9]+$/
,如果它在一行的末尾,它将获取一个数字字符串。
答案 1 :(得分:7)
$test="abc123";
//$test="abc123n";
$r = preg_match_all("/.*?(\d+)$/", $test, $matches);
//echo $r;
//print_r($matches);
if($r>0) {
echo $matches[count($matches)-1][0];
}
正则表达式解释如下:
。*? - 这将从开始时占用字符串中的所有字符,直到找到后续部分的匹配。
(\ d +)$ - 这是一个或多个数字,直到字符串结尾,分组。
没有?在第一部分中,只有最后一个数字将在第二部分匹配,因为它之前的所有数字都将被。* 占用。答案 2 :(得分:1)
在我看来,找到以数字结尾的字符串的简单方法是
$length=strlen("string1")-1;
if(is_numeric($string[$length]))
{
echo "String Ends with Number";
}
答案 3 :(得分:1)
为了避免潜在的未定义索引错误使用
is_numeric($code[strlen($code) - 1])
相反。
答案 4 :(得分:0)
首先,取字符串的长度,检查它是否等于零(空)然后return false
。 其次,检查最后一个字符$len-1
的内置函数。
is_numeric(var)
返回布尔值,无论变量是否为数字字符串。
function endsWithNumber($string){
$len = strlen($string);
if($len === 0){
return false;
}
return is_numeric($string[$len-1]);
}
测试:
var_dump(endsWithNumber(""));
var_dump(endsWithNumber("str123"));
var_dump(endsWithNumber("123str"));
结果:
bool(false)
bool(true)
bool(false)