2015-04-04 157 views
2

我有这些字符串:字符串的最后一个字符应该是一个字母或数字

$string = 'Tester,'; 

最后,我想获得:

“测试”

我像这样试过:

$string = rtrim($string, array(',', '.')); 

但rtrim()的第二个参数不能是数组。

如何从字符串的末尾删除所有不是字母或数字的内容?

谢谢。

回答

4

这应该为你工作:

(在这里我只是检查,如果字符串的最后一个字符不是字母数字wtih ctype_alnum()如果真我设置的最后一个字符为空,否则我离开它。)

<?php 

    $string = "Tester,"; 
    $string[strlen($string)-1] = (!ctype_alnum($string[strlen($string)-1])?"":$string[strlen($string)-1]); 
    echo $string; 

?> 

输出:

Tester 
+0

我个人存储的'值strlen($ string)-1',以避免重复函数调用和减法3次。 – SeinopSys 2015-04-04 10:12:05

+0

@ DJDavid98是啊这也是可能的或OP可以使用'substr($ string,-1)' – Rizier123 2015-04-04 10:14:17

+0

这只会删除最后一个字符.. OP要求*所有不是字母或数字*。如果字符串恰好是'tester,@'则会失败。 – billynoah 2015-04-04 11:34:50

1

另一种解决方案是正则表达式。

这可以解决你的任务:preg_replace('/(.*)[^a-zA-Z0-9]$/', '$1', 'Tester,');

正则表达式在行动:

Online regex tester and debugger

Codeshare.io - PHP Sample

说明

常规用于此任务的表达式查找以任何字符^(.*)开头并且不以(字母)数字字符[^a-zA-Z0-9]$结尾的字符串。 preg_replace用所谓的反向引用的值替换匹配。反向引用是对组织价值的引用。一组是弧形括号之间的所有内容。

链接

Regex reference

+0

正则表达式应该在学校教:-)不错的一个班轮。 – billynoah 2015-04-04 12:25:50

+0

谢谢:-)是的,那太棒了! – AMartinNo1 2015-04-04 12:29:08

1

你可以使用preg_match()从这样的字符串的结尾移除任何非字母数字字符:

preg_match('/(.+[a-zA-Z0-9])/',$string,$matches); 
$string = $matches[0]; 
+0

如果多于最后一个不是(字母)数字的字符必须被删除,这是一个好方法。 – AMartinNo1 2015-04-04 12:20:29

相关问题