2011-08-10 43 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,但因为它是在那里,我已经添加到我的答案代码以及

相关问题