#php #preg-match
#php #preg-match
Вопрос:
Привет, мне нужна помощь в изменении preg_match для проверки наличия 2-16 символов A-z 0-9 -_ и пробела. Прямо сейчас это контрольный URL, поэтому мне нужно удалить протокол, добавить пробел и 2-16 min / max chr.
public function checkUrl($string)
{
if(empty($string) || preg_match("#^(http|https|ftp)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*) ):?(d )?/?#i", $string))
{
return true;
}
else
{
if( isset($this) )
{
$this->addError("Input Error");
}
return false;
}
}
Ответ №1:
Я не уверен, какую часть вы хотите изменить, но…
[Необходимо сопоставить] 2-16 символов A-z 0-9 -_ и пробел.
[w- ]{2,16}
w
совпаденияa-z
,A-Z
,0-9
и_
.-
будет соответствовать литералу-
в символьном классе за пределами допустимого диапазона.' '
будет соответствовать пробелу (игнорируйте кавычки, Stack Overflow нуждался в них для отображения). Чтобы сопоставить любой символ пробела, используйтеs
.{2,16}
количественно совпадение составит от 2 до 16 раз включительно.- Вы также можете изменить
(http|https|ftp)
на(?:https?|ftp)
, который не будет захватывать группу, поскольку вы не используете никаких обратных ссылок.
Комментарии:
1. Опереди меня в этом. Единственное: разве тире не должно быть на первом месте? Или, если он не создает допустимый диапазон, он просто интерпретируется как буквальный?
2. @sdleihssirhc отлично подходит для моего теста 🙂 Если это недопустимый диапазон, он считается литералом.
Ответ №2:
В соответствии с regular-expressions.info , есть некоторые вещи, которые вы можете сделать:
- A-Z, a-z, 0-9 и _ могут быть сопоставлены с
w
- Минимальное / максимальное значение может быть задано с помощью скобок
{min, max}
Итак, чтобы проверить наличие «2-16chars A-z 0-9 -_ и пробел», нам нужно было бы сделать что-то вроде этого:
[- w]{2,16}