2016-06-09 3 views
0

Я разрабатываю приложение laravel, где пользователь может ссылаться на свой профиль, помещая его имя пользователя в соответствующую форму.PHP регулярное выражение для совпадения имени пользователя

Давайте посмотрим пример:

пользователь по имени Джон может ссылаться на его профиль, используя следующий текст: @John

Я потратил несколько часов, пытаясь понять, как регулярные выражения работ, но эта картина, где я До сих пор: @([A-Za-z0-9]+)

Этот шаблон отлично соответствует приведенному выше примеру, но также соответствует другим форматам, которых он обычно не должен.

Мне нужна помощь в создании идеального шаблона.

Он должен соответствовать строке, начинающейся с символа @. Например: @John, @Sam, @Bill и т. Д.

Он не должен соответствовать строке, которая не начинается с символа @. Например: @ John, что-то @ Sam, 123 @ Bill и т. Д.

Он также должен соответствовать форматам, содержащим более одного символа @. Например: @ Джон, @ Сэм @ то, @ Bill @@ SOMETEXT и т.д. В этом случае шаблон должен захватить: Джон @, Сэм @ что-то, Билл @@ SOMETEXT

Спасибо за вашу помощь и Извините за мой плохой английский.

+0

Какие символы специально разрешено быть захвачена в этом «имя пользователя»? – shamsup

+0

В этой «подходящей форме [s]» находится «@ Username», разрешенное где угодно в строке или только в начале? – shamsup

+0

Разрешены только символы A-Z, a-z, 0-9. – krisk

ответ

4

Это должно работать:

(?<=\s|^)@([\[email protected]]+) 

Существует положительное утверждение с просмотром назад, чтобы убедиться, что тег предшествует пробел, или начало строки. После этого это всего лишь случай потребления символа @ и помещения имени пользователя в группу захвата.

Regex demo

+0

Советы: '(? <= \ S | ^)' то же самое, что '(?

+0

Работает отлично. Благодаря! – krisk

-1

Попробуйте /(?:\[email protected]{1,3})([[email protected]]+)/i


Объяснить

@ Character. Соответствует символу «@» (код 64). {1,3} Квантификатор. Сопоставьте между 1 и 3 предыдущего токена.

\ w Word. Соответствует любому символу слова (буквенно-цифровое & подчеркивание). + Плюс. Сопоставьте 1 или более из предыдущего токена.

Вот RegExr: http://regexr.com/3djhq

+0

Это неверно соответствует примеру 'a @ john' и дважды совпадает с примером на примере' @ Sam @ something'. – duskwuff

+0

@ duskwuff: спасибо за указание. Теперь это будет игнорировать пространство и разрешить @ в имени пользователя. –

0

Ваше регулярное выражение почти правильно. Во-первых, вы хотите сказать, что ваше регулярное выражение должно совпадать и с началом строки. Вы можете добиться того, что с символом вставки (^):

^@([A-Za-z0-9]+) 

Во-вторых, вы хотите быть в состоянии поставить знак @ внутри. Теперь легко - просто добавьте этот символ в скобки.

^@([[email protected]]+) 
+0

'^' сделал бы регулярное выражение ** только ** совпадающим с именами пользователей, появляющимися в начале строки, что, как мне кажется, не требуется. – duskwuff

+0

Ха-ха, я тоже не очень четко прочитал вопрос и уже предоставил этот же ответ. @duskwuff является правильным. – gview

+0

Ну, автор сказал, что _It должен соответствовать только строке, которая начинается с символа @ symbol_ – lukeg

Смежные вопросы