шаблон HTML для не менее 5 символов, но без пробелов в начале или в конце - PullRequest
0 голосов
/ 04 июля 2018

В целях безопасности я хочу ограничить пароль не менее 5 символами (буквы любого языка, цифры, знаки препинания, special_charavters) в форме HTML с использованием атрибута pattern но я также хочу запретить начальные или конечные пробелы, оставляя пробелы между словами. Так что length(trim(password)>=5) будет правдой. поэтому правильный пароль будет, например,

abc1245
abc12
1 34~_
1             34~_
спасибо Россия

и неправильные будут, например,

a sd 
 123 __                  

Я пытался использовать этот шаблон

^\b[/S ]{5,}*\b$

но это не работает. Любая помощь приветствуется

Ответы [ 3 ]

0 голосов
/ 04 июля 2018

Я бы предложил

pattern="\S(?:\s*\S){3}.*\S"

См. Демоверсию regex

Он будет скомпилирован как ^(?:\S(?:\s*\S){3}.*\S)$ шаблон, соответствующий

  • ^(?: - начало строки и открытие группы без захвата
  • \S - непробельный символ
  • (?:\s*\S){3} - 3 повторения
    • \s* - 0+ пробельных символов
    • \S - символ без пробелов
  • .* - любые 0+ символов
  • \S - символ без пробелов
  • )$ - конец группы без захвата и конец привязки строки, добавленный механизмом HTML5.

input:valid {
  color: black;
}
input:invalid {
  color: red
}
<form name="form1"> 
 <input pattern="\S(?:\s*\S){3}.*\S" title="Please enter at least 5 non-whitespace chars, no leading/trailing whitespace allowed!" value=" abc __   " />
 <input type="Submit" /> 
</form>

Примечание : Атрибут шаблона HTML5 значение привязано по умолчанию, т. Е. Весь шаблон переносится в ^(?: и )$. Вам не нужно ставить ^ и $ между шаблоном, и даже если вы добавляете альтернативу, как это сделал Ян, вам не нужно ^ / $ вокруг пустого значения.

Язык регулярных выражений, используемый для этого атрибута, такой же, как и в JavaScript, за исключением того, что атрибут pattern сопоставляется со всем значением, а не только с каким-либо подмножеством (как если бы оно подразумевало ^(?: в начале шаблон и )$ в конце).

0 голосов
/ 04 июля 2018

Попробуйте регулярное выражение \S.{5,}\S:

<input required pattern="\S.{3,}\S" title="Please match the format.">
0 голосов
/ 04 июля 2018

Try: <input type="text" required pattern="[^\s].{3,}[^\s]" name='foo'>

Это запретит любому первому или последнему быть \s (пробел). Между ними нужно 3 (или более) всего, что в сумме составляет до 5 символов.

Обратите внимание, что пароль, содержащий 5 символов, по-прежнему очень мал и может быть легко взломан. Особенно, если кто-то получил базу данных или у вас нет защиты от перебора на вашем сервере.

Атрибут шаблона не нуждается в маркерах начала ^ и конца $.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...