Мне нужно регулярное выражение (php) для соответствия правилам имени пользователя Yahoo:
Use 4 to 32 characters and start with a letter. You may use letters, numbers, underscores, and one dot (.).
php, как я уже сказал. хотя я мог бы улучшить его до php 4. что-то






Ограничение в одну точку? Это сложно.
Я не эксперт по регулярным выражениям, но я думаю, что это получится, за исключением этого:
[A-Za-z][A-Za-z0-9_.]{3,31}
Может быть, вы могли бы проверить наличие. требование отдельно?
Для этого требуются анкеры ^ и $, чтобы обеспечить соблюдение требований к длине.
Как бы вы изменили это значение для одного подчеркивания, сохранив все остальные ограничения?
@Joel так же, как я сделал для одной точки: применяйте ее отдельно от выражения.
/[a-zA-Z][a-zA-Z0-9_]*\.?[a-zA-Z0-9_]*/
И проверьте, если strlen ($ username)> = 4 и <= 32.
Теперь, если бы мы могли найти способ их комбинировать, просто он ДОЛЖЕН соответствовать обоим.
Да уж. Однако strlen - довольно быстрая операция.
но у меня нет возможности использовать strlen, в том месте, где я нахожусь, одно регулярное выражение - это все, что я получаю.
Что мешает вам добавить строку после регулярного выражения?
многое могло. Например, в ASP.Net вы можете использовать элемент управления RegExValidator. Или у него может быть строка в файле конфигурации, которую он может установить, и все.
да, это в значительной степени последнее. Я стараюсь, чтобы мой класс был чистым и чистым.
Если вы хотите сохранить его в одной строке в одном месте, вы всегда можете превратить это в функцию checkusername () и выполнить там две проверки. Попытка сохранить классы чистыми звучит так, как будто это оставит вас с неподдерживаемым кодом, если вы постоянно пытаетесь найти способы объединить строки.
Используя опережения, вы можете сделать следующее:
^(?=[A-Za-z](?:\w*(?:\.\w*)?$))(\S{4,32})$
Поскольку вы не указали, какой тип регулярного выражения вам нужен, я добавил много вещей, совместимых с Perl 5. Как (?: ... ) для не захватывающих паренов.
Примечание: Я снова добавил недостающий закрывающий элемент.
У этого отсутствует закрывающий парен, и как только я добавлю его (попробовал пару мест ...), я не могу заставить его соответствовать ни одной строке, которую я на него набрасываю.
/^[A-Za-z](?=[A-Za-z0-9_.]{3,31}$)[a-zA-Z0-9_]*\.?[a-zA-Z0-9_]*$/
Или чуть короче:
/^[a-z](?=[\w.]{3,31}$)\w*\.?\w*$/i
Хорошо, прочитав об обходных методах, теперь я понял, это довольно больной человек, спасибо
добавьте /i в конце для нечувствительности к регистру. Таким образом, вам не нужно указывать строчные и прописные буквы.
Первый - это /^[A-Za-z](?=[A-Za-z0-9_\.]{3,31}$)[a-zA-Z0-9_]*\.?[a-zA-Z0-9_]*$/ (ваш не избежал точки в предварительном просмотре). Я думаю, что неэкранированный период делает остальную часть [A-Za-z0-9_] бессмысленной. ОДНАКО, что интересно, я думаю, что он все еще работает, потому что он находится в предварительном просмотре, что означает, что следующие [a-zA-Z0-9_] также должны быть сопоставлены, эффективно исправляя неэкранированный .. Но также возможно, я думаю, просто сделать этот /^[A-Za-z](?=.{3,31}$)[a-zA-Z0-9_]*\.?[a-zA-Z0-9_]*$/, хотя я хотел оригинал с \. лучше всего. Я все еще новичок в REGEX, это правильно?
Внутри [] вам не нужно выходить из .. Это будет соответствовать только точке.
Какой тип регулярного выражения будет делать это? Какой инструмент? Если это не движок PCRE (используемый в Python и Ruby), различные инструменты имеют различный синтаксис регулярных выражений.