出于安全原因,我想使用模式属性以HTML格式将密码限制为至少5个字符(任何语言的字母,数字,标点符号,special_charavters)
但我也想禁止前导或尾随空格,同时允许单词之间使用空格。因此length(trim(password)>=5)
将是正确的。
因此正确的密码例如是
abc1245
abc12
1 34~_
1 34~_
спасибо Россия
以不正确的为例
a sd
123 __
我尝试使用此模式
^\b[/S ]{5,}*\b$
但是它不起作用。感谢您的帮助
答案 0 :(得分:1)
我建议
pattern="\S(?:\s*\S){3}.*\S"
请参见regex demo
它将被编译为与之匹配的^(?:\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 pattern attribute的值是固定的,即整个模式都打包为^(?:
和)$
。您不必在模式之间放置^
和$
,即使您像Jan一样添加替代项,也不需要在^
/ $
周围加上空格。空值。
此属性所使用的正则表达式语言与JavaScript中所使用的正则表达式语言相同,不同之处在于pattern属性与整个值(不仅是任何子集)都匹配(有点像在{{1}模式的开头,
^(?:
结束)。
答案 1 :(得分:0)
尝试:
<input type="text" required pattern="[^\s].{3,}[^\s]" name='foo'>
这将不允许任何第一个或最后一个为\s
(空格)。在这两者之间,需要3(或更多)个东西,总计不超过5个字符。
请注意,包含5个字符的密码仍然很小,很容易被强制使用。尤其是如果有人获得了数据库或者您的服务器上没有暴力保护。
pattern属性不需要开始^
和结束$
标记。
答案 2 :(得分:0)
尝试使用正则表达式\S.{5,}\S
:
<input required pattern="\S.{3,}\S" title="Please match the format.">