2015-04-04 207 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

相關問題