2012-04-05 3 views
4

SO buddies, greetings. У меня есть некоторые требования к паролю, которые мне нужно реализовать, и одно из требований - строка не может начинаться или заканчиваться специальным символом. Я провел некоторое время в Googling, но мой RegEx kung-fu - это уровень кимосабе.Строка регулярных выражений не начинается или не заканчивается специальным символом

Только в случае, если вы заинтересованы в какой-то код, вот JavaScript:
Примечание: Да, пароли также проверяются на сервере, а :) Следующий фрагмент кода запускает тесты RegEx и просто проверяет, или x - элемент строки, связанный с правилом пароля.

var validate = function(password){ 
     valid = true; 

     var validation = [ 
      RegExp(/[a-z]/).test(password), RegExp(/[A-Z]/).test(password), RegExp(/\d/).test(password), 
      RegExp(/[-!#$%^&*()_+|~=`{}\[\]:";'<>?,./]/).test(password), !RegExp(/\s/).test(password), !RegExp("12345678").test(password), 
      !RegExp($('#txtUsername').val()).test(password), !RegExp("cisco").test(password), 
      !RegExp(/([a-z]|[0-9])\1\1\1/).test(password), (password.length > 7) 
     ] 

     $.each(validation, function(i){ 
      if(this == true) 
       $('.form table tr').eq(i+1).attr('class', 'check'); 
      else{ 
       $('.form table tr').eq(i+1).attr('class', ''); 
       valid = false 
      } 
     }); 

     return(valid); 

    } 
+0

Я не уверен, если это ошибка, но я вижу, что регулярное выражение RegExp («12345678») не имеет каких-либо ограничителей, которые могли бы быть его ? – rednaw

+0

Что не так с '/^[\ d \ w] + $/i'? – Alexander

+0

@rednaw в коде отсутствует какая-либо ошибка, необходимо выполнить новое требование. Основываясь на ответе ниже, мне кажется, что мне нужно что-то вроде '/^[^ a-z]. * /', Но мне также нужно включить числа. Другими словами, я удостоверяюсь, что пароль начинается и заканчивается буквой или номером. – pixelbobby

ответ

12

EDIT: Регулярное выражение вы хотите: -

/^[a-zA-Z0-9](.*[a-zA-Z0-9])?$/ 

Дополнительная информация

В регулярных выражениях ^ 'начало строки' означает и конец $ означает» строки ", например:

/^something$/ 

Матчи

'something' 

Но не

'This is a string containing something and some other stuff' 

вы можете инвертировать символы с помощью [^-char to negate-], так

/^[^#&].*/ 

Соответствует любой строке, которая начинается не с # или &

+0

Этот ответ по-прежнему очень полезен. – pixelbobby

+0

Я собираюсь дать ответ на @rgvcorley, потому что он приложил максимум усилий и был первым ответом, хотя rednaw получил ответ (близко) и быстро. – pixelbobby

1

Это регулярное выражение должно быть то, что вы хотите:

/^[0-9a-z].*[0-9a-z]$/ 
+0

ДА! '^ [0-9a-zA-Z]. * [0-9a-zA-Z] $' – pixelbobby

+1

Это не соответствует строке, такой как 'p' или '1', которые начинаются и заканчиваются символом или числом – rgvcorley

+0

Вы уверены? Я тестировал выражение в своем комментарии выше на RegExr, и он соответствовал следующему: password1, password, 1password ... – pixelbobby

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