Регулярное выражение для 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_*() функции.

Другие вопросы по тегам