Kulaxyz
@Kulaxyz
Могу лучше

Почему не работает регулярное выражение?

Дорогие коллеги. Такая проблема.
Нужно, чтобы при отправке формы выбивало ошибку, если есть лишние символы. У меня если в title имеется хотя бы одна буква или цифра и любые символы, возвращает false и код идёт во второй ветке и публикует статью. В тоже время, если в title только символы которых нет в регулярном выражении, всё работает как надо. В чём дело?
<?php
/*Проверяем отправлена ли форма*/
if(count($_POST)>0){
	
	/*Получаем данные в переменные и сохраняем в файл, trim для удаления пробелов.*/
$title = trim($_POST['title']);
$content = trim($_POST['content']);
if (!preg_match('/[a-z0-9\-]/', $title)){
	echo 'Название может содержать только латинские буквы, цыфры и дифиз!';
}
else{
file_put_contents('data/' . $title, $content, FILE_APPEND);
/*После заполнения возвращаем на главную*/
header("Location: index.php");
}
}
?>
  • Вопрос задан
  • 93 просмотра
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
if (!preg_match('/^[a-z0-9\-]+$/', $title)){

*цифры *дефис

PS: По уму заглавные буквы тоже вроде должны входить?
PPS: https://regex101.com
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
GTRxShock
@GTRxShock
Full-stack developer (Symfony, Angular)
if (preg_match('/[^a-z0-9\-]/', $title)){
  echo 'Название может содержать только латинские буквы, цифры и дефис!';
}
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Потому что вашему выражению соответствует любая строка, содержащая хотя бы один указанный символ.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы