Preg_match строка, должна содержать буквы и цифры - PullRequest
2 голосов
/ 02 июня 2011

Предложение может быть: ЖК-монитор BenQ G2420HDBL 23,6 "

Нужно взять часть "G2420HDBL". Буквы и цифры могут быть в другом порядке, но все равно остаются строкой, в которой присутствуют как буквы, так и цифры.

Ответы [ 5 ]

2 голосов
/ 02 июня 2011

Вы можете использовать следующее регулярное выражение в режиме без учета регистра:

(?=[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];
}

Посмотри

0 голосов
/ 06 июня 2011

Закончилось этим, просто пришлось 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;
    }
}
0 голосов
/ 02 июня 2011

Теперь я понимаю, что вам на самом деле нужно.Это регулярное выражение находит строки, содержащие любые цифры, буквы и тире.Только строка не может начинаться или заканчиваться тире.

$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]);
0 голосов
/ 02 июня 2011

Вы можете использовать ctype_alnum, но, возможно, есть лучший способ использования регулярных выражений:

$str = "BenQ G2420HDBL 23.6";
$pieces = split(' ', $str);
$theStr = '';
foreach($pieces as $piece) {
    if(ctype_alnum($piece)) {
        $theStr = $piece;
        break;
    }
}
0 голосов
/ 02 июня 2011
$number = substr($name, 6, strlen($name) - 28);
...