2013-11-18 8 views
-1

Заявление о проблемах.Javascript Regex Issue - UserName

Имя пользователя должно быть от 6 до 32 буквенно-цифровых символов. Пробел разрешен, если только он не является первым или последним символом. Не объединяйте более двух одинаковых символов. Разрешены следующие специальные символы: @ # $. Имя пользователя чувствительно к регистру

тока Regex мы имеем

(?!.*(.)\1{2})^[^\s]([0-9]*)([A-Za-z]+)(\w|\@|\#|\$|\s|\-)*[^\s] 

работал отлично для этих тестов

eldricdsouza 
eldric1dsouza 
[email protected] 
eldric#dsouza 
eldric$dsouza 
eldric dsouza 
eldric 
eldricdsouza1 
!eldric123# 
eeeldric123# 
eellldric123# 
!user1405! 
[email protected]! 
[email protected]#$ 
[email protected]### 
[email protected]###$ 
[email protected]##$ 
[email protected]##$ 

Не работает хорошо для них ...

[email protected]##$ ---gave an error...when this is valid. 
usereldric_ --- underscore is not valid 
usereldric-dsouza --- hyphen is not valid. 
[email protected]##$ ---gave an error...when this is valid. 
usereldric_ --- underscore is not valid 
usereldric-dsouza --- hyphen is not valid. 

или этот ...

UseerrNaame78 
+0

Итак, в чем проблема с текущим регулярным выражением? –

+0

Что @ FrédéricHamidi спрашивает, какую строку вы ожидаете соответствовать, которая не соответствует или наоборот? – Chandranshu

+0

«более двух одинаковых символов» означает «более двух одинаковых символов назад»? –

ответ

0

регулярное выражение, которое соответствует вашим требованиям, это:

/^([[email protected]#$])(?!\1)(?:([[email protected]#$ ])(?!\2)){4,30}[[email protected]#$]$/ 

DEMO: http://regex101.com/r/dS9kE2

Некоторые пояснения:

  • (?!\1) - (или 2) смотрит вперед, что следующий символ отличное от последнего сопоставленного
  • [[email protected]#$] - класс одобренного символа RS для первой и последней позиции
  • [[email protected]#$ ] - класс утвержденных символов в середине
  • {4,30} средней части должен быть между (6-2) и (32-2) символами
1

Вы можете использовать этот шаблон не более чем 2 одинаковых символов во все строке:

^(?=[a-zA-Z])(?:([\[email protected]#$-]| (?!$))(?!.*\1.*\1)){6,32}$ 

Но не более чем на 2 одинаковых символы спина к спине, вы можете использовать:

^(?=[a-zA-Z])(?:([\[email protected]#$-]| (?!$))(?!\1\1)){6,32}$ 
+0

Это позволит использовать пространство последнего символа. – Toto

+0

@ M42: Спасибо, я забыл это! –

+0

Пожалуйста, +1. – Toto