2011-08-10 54 views
0

我有此pregmatch其允許僅數字字符,但我需要爲允許一個字母字符的電位作爲允許在一個字符串的開始的單個字母字符

T17900串這樣的開始

$value = preg_replace("/[^0-9\s]/", "", $value); 

例:

,如果這是我的$值= 22202-HAV.jpg

我只需要22202.

如果這是我的$值= T22202-HAV.jpg

我只需要T22202

+0

一個很好的RegExp測試網站 - > http://www.regextester.com/ – ManseUK

回答

1
$value = preg_replace('~^([a-z][0-9]*|[0-9]+)?.*~i', "$1", $value); 

基本上,如果字符串以字母+一些數字或只是數字開頭,保留這部分並刪除其餘部分。

+0

這似乎很好地工作謝謝你! – Andy

+0

使用'/ [a-z]/i'來得到一個字母只適用於7位數據集,並且有些不推薦使用。你可以使用'/ \ pL /'來獲得單個字母,或'/ \ pL + /'來連續獲取它們中的幾個,這也可以用於7位數據。 – tchrist

0

$value = preg_replace("/^[A-Z][0-9]*/", "", $value); ^是位置=啓動

+0

在[AZ]後面添加一個問號,如果該字母字符是o ptional。 – CodeTwice

+0

這很不幸沒有工作 就像你有一個像22201-HAV.jpg這樣的文件名,最後的所有位都留下了。 我需要它離開22201,或者如果因爲任何原因,在開始時有一封信也會留下。 IE T22201 – Andy

+0

@Andy ..也許你可以在你的問題中增加一些細節 - 或者增加一個例子! – ManseUK

0

我不會在這種情況下使用preg_replace,但preg_match代替:

<?php 
foreach(array('22202-HAV.jpg', 'T22202-HAV.jpg') as $value) { 
    if (preg_match("/(?P<name>(?:\A[[:alpha:]])?[0-9\s]*)/", $value, $match)) { 
     $value = $match['name']; 
    } 
    echo $value.PHP_EOL; 
} 

看到它in action

而且我不明白你爲什麼在你的模式需要這個\s,但因爲它是在那裏,我已經添加到我的答案代碼以及

相關問題