вопрос переменных php - PullRequest
       25

вопрос переменных php

0 голосов
/ 19 июня 2009

Можно ли создать переменную с регулярным выражением некоторого вида или с другим типом кода, который мог бы выполнить следующую задачу?

Например, данные в var test = parta, но также могут быть равны partm. Обратите внимание, я не хочу массив ...

Я использую это в поиске sql, но у меня есть тысячи различных моделей и серий, и я хочу вернуть только определенные серии моделей, не возвращая серии, аналогичные входным ...

Есть ли что-то, что позволит пятому символу быть списком желаемых символов ...?

Другой пример у меня есть модель

две модели из одной серии

515-п

515m

модель в разных сериях 1515

Я не хочу возвращать 1515, если я ищу серию 515 ...

Обратите внимание, что это не единственная комбинация ... поэтому поиск не может быть указан только для этой ... должен быть общий результат.

Ответы [ 5 ]

1 голос
/ 19 июня 2009

Обычно вы используете синтаксис SQL LIKE для поиска информации в базе данных. Я не уверен, что вы будете использовать PHP. Если бы вы искали все модели, начиная с 515, вы бы использовали что-то вроде:

SELECT * FROM `models` WHERE model_name LIKE '515%';

Обратите внимание, что процент только на правой стороне, поэтому это не будет 1515.

0 голосов
/ 19 июня 2009

Я думаю, что этого достаточно, чтобы (почти) быть реальным решением:

function isModel($prefix,$input)
{
    return preg_match("/^" . $prefix . "\s*-?\s*?[nm]/", $input);
}

Некоторые тестовые случаи:

isModel('5155', '5155n'); // "1"
isModel('515','515-n'); // "1"
isModel('789','789 - m'); // "1"
isModel('111','111    -n'); // "1"
0 голосов
/ 19 июня 2009

Я всегда рекомендую избегать регулярных выражений, если вы можете. В этом случае это легко возможно, у вас есть модель и допустимые расширения этой модели. Таким образом, вам нужно только проверить, начинается ли строка с требуемой строки модели и заканчивается на одном из допустимых расширений:

$string = '515-n';
$possibleExtensions = array('-n', 'm');
$model = '515';
$isDesiredModel = strpos($string, $model) === 0 &&
    in_array(substr($string, strlen($model)), $possibleExtensions);
0 голосов
/ 19 июня 2009

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

%    A substitute for zero or more characters

_    A substitute for exactly one character

[charlist]   Any single character in charlist

[^charlist]
or
[!charlist]  Any single character not in charlist

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

WHERE model LIKE '515%' <--matches 515 followed by zero or more characters

WHERE model LIKE '515-[nm]' <--matches 515-n and 515-m only

WHERE model LIKE '515%[nm]' <--matches 515n and 515-m, also would match 515Qm
0 голосов
/ 19 июня 2009
preg_match('/\b515\b-?(?:n|m)/', $model)

В общем:

preg_match('/\b' . $model_number . '\b-?(?:' . join('|', $array_of_series_letters) . ')/', $model)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...