2015-08-12 5 views
0

Все, Я пытаюсь построить регулярное выражение (я буду использовать, чтобы проверить действительные имена пользователей):RegExp игнорировать специальные и повторяющиеся символы (тестовое имя пользователя)

^[(0-9)|(_|\.)]|^[0-9]+$|[^a-zA-z0-9_.]{3,}|(_\.|\._)|\.{2,}|_{2,} 

и его испытания с этой строкой:

[email protected] sslkdf*.sf...____.__sfsfdddddsss 

Что это регулярное выражение должно проверить, является:

  1. строка не должна начинаться с цифр, подчеркивания или точка
  2. строка должна быть буквенно-цифровым
  3. не должен содержать символы повторяются трижды или более --this терпит неудачу
  4. не должна содержать подчеркивание и точка вместе
  5. не должны содержать точки и подчеркивания вместе
  6. не должны содержащие повторяющиеся точки, не должны содержать повторяющихся символов подчеркивания

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

Мои вопросы:

  1. Как я могу исправить это регулярное выражение, поэтому он может поймать повторяющиеся символы?
  2. Как я могу оптимизировать это регулярное выражение?

Заранее спасибо

EDIT По просьбе действительную строку являются:

  1. Джона
  2. john.snow
  3. john.snow123
  4. john1.snow1
  5. john_snow
  6. john_snow123
  7. john1_snow1

недействительных струн:

  1. 1john.snow
  2. .john_snow
  3. john__snow
  4. john..snow
  5. jjjohn.снег
  6. _john_snow

ответ

1

И может быть сделано таким образом, тоже -

(?i)^(?=[a-z])(?!.*?(?:\._|_\.|\.{2}|_{2}|([a-z\d])\1{2}))[a-z\d._]+$

Formatted:

(?i)    # Case insensitive 
^     # BOS 
(?= [a-z])   # First char alpha 
(?!     # Not these 
     .*? 
     (?: 
      \._     # dot, underscore 
     | _\.     # underscore, dot 
     | \.{2}    # 2 or more dots 
     | _{2}    # 3 or more underscore 
     | ([a-z\d])   # (1), 3 or more repeated alpha-num's 
      \1{2} 
    ) 
) 
[a-z\d._]+   # Get valid char's: alpha-num, dot and underscore 
$     # EOS 
Смежные вопросы