Preg_match一个字符串,必须包含字母和数字

时间:2011-06-02 09:52:46

标签: php string preg-match

这句话可能是: 明基G2420HDBL 23.6英寸宽屏液晶显示器

需要抓住“G2420HDBL”部分。字母和数字可能的顺序不同,但仍然是一个字母和数字都存在的字符串。

5 个答案:

答案 0 :(得分:2)

您可以在不区分大小写的模式下使用以下正则表达式:

(?=[a-z]*[0-9])(?=[0-9]*[a-z])[a-z0-9-]+

基本上它匹配第一个字符串,该字符串仅由至少一个字母和至少一个数字组成的字母和数字组成。

在PHP中:

if(preg_match("/(?=[a-z]*[0-9])(?=[0-9]*[a-z])([a-z0-9-]+)/i",$input,$match)) {
   echo $match[1];
}

See it

答案 1 :(得分:0)

$number = substr($name, 6, strlen($name) - 28);

答案 2 :(得分:0)

您可以使用ctype_alnum,但使用正则表达式可能有更好的方法:

$str = "BenQ G2420HDBL 23.6";
$pieces = split(' ', $str);
$theStr = '';
foreach($pieces as $piece) {
    if(ctype_alnum($piece)) {
        $theStr = $piece;
        break;
    }
}

答案 3 :(得分:0)

现在我明白了你真正需要的东西。此正则表达式查找包含任何数字,字母和短划线的字符串。只有字符串不能以短划线开头或结尾。

$name = 'BenQ -1G2-420H-DBL- 23.6" Wide LCD Monitor';
$a = preg_match('/\b(([0-9A-Z]+[A-Z0-9]+)[-]*)+\b/i', $name, $m);

var_dump($m[0]);

答案 4 :(得分:0)

结束使用它,只需要str_replace破折号。 @codaddict正则表达式只比这个慢一秒。

$str = "BenQ G2420HDBL 23.6";
$pieces = split(' ', $str);
$theStr = '';
foreach($pieces as $piece) {
    if(!ctype_alpha($piece) && !ctype_digit($piece) && ctype_alnum($piece)) {
        $theStr = $piece;
        break;
    }
}