Я пытаюсь создать регулярное выражение, чтобы убедиться, что данная строка содержит только альфа-символы a-z или A-Z. Строка может содержать до 25 букв. (Я не уверен, может ли регулярное выражение проверять длину строк)
Вот что я до сих пор... не могу понять, что с ним не так, хотя
Я бы подумал, что это означало бы, что строка может содержать только буквы верхнего или нижнего регистра от a-z, но когда я сопоставляю ее со строкой со всеми буквами, она возвращает false...
Также будут приветствованы любые предложения относительно эффективности использования регулярных выражений и других методов проверки.
Ответ 2
Я пытаюсь создать регулярное выражение, чтобы убедиться, что данная строка имеет только альфа символы a-z или A-Z.
Легко сделано, как многие другие указали, используя так называемые "классы символов". По сути, это позволяет нам указать диапазон значений, которые нужно использовать для сопоставления:
(ПРИМЕЧАНИЕ: для упрощения я предполагаю implict ^ и $anchors, которые объясняются позже в этом сообщении)
[a-z] Соответствует любой отдельной строчной букве.
ex: совпадения, 8 не соответствуют
[A-Z] Соответствует любой отдельной строчной букве.
ex: совпадения, a не соответствует
[0-9] Сопоставьте любую цифру от нуля до девяти
ex: 8 совпадений, a не соответствует
[aeiou] Совпадение только с a или e или я или o или u.
ex: o совпадения, z не соответствует
[a-zA-Z] Соответствует любой отдельной строчной букве ИЛИ.
ex: совпадения, совпадения, 3 не соответствуют
Это, естественно, также можно отрицать:
[^ a-z] Сопоставьте все, что НЕ является строчной буквой
ex: 5 совпадений, совпадений A, a не соответствует
[^ A-Z] Сопоставьте все, что не является буквой верхнего регистра
ex: 5 совпадений, A не соответствует, соответствует
[^ 0-9] Сопоставьте все, что НЕ является числом
ex: 5 не соответствует, A соответствует, соответствует
[^ Aa69] Сопоставьте что угодно, если оно не A или или 6 или 9
ex: 5 совпадений, A не соответствует, a не соответствует, 3 совпадения
Чтобы увидеть некоторые общие классы символов, перейдите по ссылке:
http://www.regular-expressions.info/reference.html
Строка может содержать до 25 букв. (Я не уверен, может ли регулярное выражение проверять длину строк)
Вы можете абсолютно проверить длину, но не так, как вы могли себе представить. Мы измеряем повторение, а не строго, используя {}:
a {2} Совместите два а вместе.
ex: a не соответствует, aa соответствует, aca не соответствует
4 {3} Сопоставьте три 4 вместе.
ex: 4 не соответствует, 44 не соответствует, 444 совпадений, 4434 не соответствует
Повторение имеет значения, которые мы можем установить для нижнего и верхнего пределов:
a {2,} Сопоставьте два или более а вместе.
ex: a не соответствует, aa соответствует, aaa соответствует, aba не соответствует, aaaaaaaaa соответствует
a {2,5} Сопоставьте по две-пять а вместе.
ex: a не соответствует, aa соответствует, aaa соответствует, aba не соответствует, aaaaaaaaa не соответствует
Повторение распространяется на классы символов, поэтому:
[a-z] {5} Сопоставьте любые пять строчных символов вместе.
ex: совпадения bubba, Bubba не соответствует, BUBBA не соответствует, asdjo соответствует
[A-Z] {2,5} Совместите два-пять символов верхнего регистра вместе.
ex: bubba не соответствует, Bubba не соответствует, BUBBA соответствует, BUBBETTE не соответствует
[0-9] {4,8} Сопоставьте четыре-восемь чисел вместе.
ex: bubba не соответствует, 15835 совпадений, 44 не соответствует, 3456876353456 не соответствует
[a3g] {2} Сопоставьте a OR 3 OR g, если они отображаются дважды вместе.
ex: aa match, ba не соответствует, 33 совпадения, 38 не соответствует, a3 НЕ соответствует
Теперь посмотрим на ваше регулярное выражение:
[^ а-г] | [^ A-Z]
Перевод: сопоставьте все, если оно не является строчной буквой или буквой в верхнем регистре.
Чтобы исправить это, чтобы он соответствовал вашим потребностям, мы бы переписали его следующим образом:
Шаг 1: Удалите отрицание
[A-Z] | [A-Z]
Перевод: найдите любую строчную букву или заглавную букву.
Шаг 2: Хотя это не требуется, немного очистите логику ИЛИ
[A-Za-Z]
Перевод: найдите любую строчную букву или заглавную букву. То же, что и выше, но теперь используется только один набор из [].
Шаг 3: Теперь укажите "длина"
[A-Za-Z] {1,25}
Перевод: найдите любую строчную букву или заглавную букву, повторенную от одного до двадцати пяти раз.
Это то, где делаются фанки. Вы могли бы подумать, что вы сделали здесь, и вы вполне можете быть в зависимости от технологии, которую используете.
Строго говоря, регулярное выражение [a-zA-Z] {1,25} будет соответствовать от одной до двадцати пяти или более строчных букв ANYWHERE по строке:
[A-Za-Z] {1,25}
совпадения, совпадения aZgD, совпадения BUBBA, 243242hello242552 MATCHES
Фактически, каждый пример, который я дал до сих пор, сделает то же самое. Если это то, что вы хотите, тогда вы находитесь в хорошей форме, но, основываясь на своем вопросе, я предполагаю, что вы ТОЛЬКО хотите, чтобы на всей линии было всего двадцать пять верхних или строчных букв. Для этого мы обращаемся к якорям. Якорям разрешено указывать эти досадные детали:
^ начало строки
(Я знаю, мы раньше использовали это для отрицания, не заставляйте меня начинать)
$ конец строки
Мы можем использовать их следующим образом:
^ a {3} С самого начала линии матч три раза вместе
ex: aaa matches, 123aaa не соответствует, aaa123 соответствует
a {3} $ Сопоставьте три раза вместе в конце строки
ex: aaa matches, 123aaa совпадения, aaa123 не соответствует
^ a {3} $ Сопоставьте три раза вместе для линии ENTIRE
ex: aaa matches, 123aaa не соответствует, aaa123 не соответствует
Обратите внимание, что aaa соответствует во всех случаях, потому что он имеет три а в начале и конце строки, технически говоря.
Таким образом, окончательное, технически правильное решение для нахождения слова "длиной до пяти символов" в строке будет:
^ [A-Za-Z] {1,25} $
Фанковая часть состоит в том, что некоторые технологии неявно помещают якоря в регулярное выражение для вас, а некоторые - нет. Вам просто нужно проверить ваше регулярное выражение или прочитать документы, чтобы узнать, есть ли у вас якорные якоря.