Регулярное выражение для PHP 5.1.6
Может ли кто-нибудь помочь мне с регулярным выражением, чтобы включить
A-z a-z 0-9 - _ (space) (dot) < > ( ) ~
и исключить другие специальные символы в функции ereg из php 5.1.6?
Я слишком запутался с обратной косой чертой и порядком вещей, которые мне нужно написать, если это потребуется. Если это невозможно, вы можете предложить мне любую похожую функцию, которая работает.
Спасибо
2 ответа
Ereg версия:
if (ereg('^[a-zA-Z0-9.<>()~ _-]+$', $subject)) {
# Successful match
}
Preg версия: (после популярного спроса)
if (preg_match('/^[a-zA-Z0-9.<>()~ _-]+$/', $subject)) {
# Successful match
}
Что-то вроде этого?
# ^[a-zA-Z0-9.<>()~ _-]+$
#
# Assert position at the beginning of the string «^»
# Match a single character present in the list below «[a-zA-Z0-9.<>()~ _-]+»
# Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
# A character in the range between “a” and “z” «a-z»
# A character in the range between “A” and “Z” «A-Z»
# A character in the range between “0” and “9” «0-9»
# One of the characters “.<>()~ ” «.<>()~ »
# The character “_” «_»
# The character “-” «-»
# Assert position at the end of the string (or before the line break at the end of the string, if any) «$»
Это должно сделать трюк:
[A-Za-z0-9 _.()~<>-]+
Здесь, сопоставьте все символы, которые вы хотите (список внутри []
). +
в конце означает "соответствовать одному или нескольким символам в наборе".
Чтобы соответствовать тире (-
), он должен быть последним в списке символов, иначе вы получите плохо сформированное регулярное выражение из-за -
также обозначает диапазоны символов, таких как A-Z
например.
Что касается вашей путаницы по поводу побега символов, вам на самом деле не нужно делать это, как указал FailedDev, при условии, что ваши символы находятся внутри класса символов: []
,
В заключение, ereg_*()
устарела. Вместо этого используйте preg_*()
функции.