Как сделать регулярное выражение для любого символа и пробела - PullRequest
0 голосов
/ 02 января 2019

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

Я хочу разрешить использование буквенно-цифровых символов и пробелов в строке поиска, но пока я не добился успеха.Я провел исследование в Google, чтобы найти что-то, что может помочь мне сделать это, но пока не повезло.Мне нужна ваша помощь о том, как написать регулярное выражение для preg_match Так что я пытаюсь здесь сделать, это заменить любой символ, который не является 0-9 az AZ, и пробел должен быть заменен на ""

$searchq = mysql_prep(urldecode($_GET['q']));
$searchq = preg_replace("#[^0-9a-z\s+]#i", "", $searchq);

РЕДАКТИРОВАТЬ: После глубокого понимания того, что происходит и чего я хочу достичь, я обнаружил, что проблема в моем запросе, а не в моем регулярном выражении!Если пользователь вводит, например, имя и фамилию, например, Джон Доу, я хочу, чтобы результаты поиска вернулись с Джоном Доу из базы данных!поэтому мне нужна ваша помощь с моим запросом о том, как я могу сделать это достижимым, у меня есть 2 столбца один для имени, которое является "first_name" и один для фамилии, которая является "last_name"

вот мой запрос:

$query_search2 = "SELECT * FROM users_table WHERE first_name LIKE '%$searchq%' OR last_name LIKE '%$searchq%' OR username LIKE '%$searchq%' OR first_name LIKE '%$searchq%' AND last_name LIKE '%$searchq%'";

Ответы [ 3 ]

0 голосов
/ 02 января 2019

Решение, которое мне удалось найти, таково: для выражения регулярного выражения я использовал:

$searchq = preg_replace("/[^A-Za-z0-9\s ]/", "", $searchq);

и для запроса я использовал это:

// ut is the designation of the users_table which we define ourselves
            $query_search2 = "SELECT * FROM users_table ut WHERE CONCAT(ut.first_name, ' ', ut.last_name) LIKE '%$searchq%'";
0 голосов
/ 02 января 2019

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

SELECT * FROM USER_TABLE WHERE REGEXP_LIKE (first_name, 'ваше регулярное выражение здесь') ИЛИ REGEXP_LIKE (last_name, 'ваше регулярное выражение здесь') ИЛИ REGEXP_LIKE (имя пользователя, 'ваше регулярное выражение здесь'); Если вы используете в запросе переменную regex, распечатайте запрос и убедитесь, что запрос генерируется правильно.

Используйте регулярные выражения в соответствии с вашими потребностями .--> Вы можете использовать следующее регулярное выражение, которое найдет все алфавиты независимо от регистра. A-Z, a-z, 0-9, пробелы, включающие символы табуляции и подчеркивание.

Regex: '(?: \ W + | \ s +) {1,}'

Если вы не хотите захватывать Underscore, вы можете использовать следующее:

Regex: '([A-Za-z0-9] + | \ s +) {1,}

0 голосов
/ 02 января 2019

Вы можете использовать следующее регулярное выражение, которое найдет все алфавиты независимо от регистра. A-Z, a-z, 0-9, пробелы, включающие символы табуляции и подчеркивание.

Regex: '(?: \ W + | \ s +) {1,}'

Если вы не хотите захватывать Underscore, вы можете использовать следующее:

Regex: '([A-Za-z0-9] + | \ s +) {1,}'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...