我有一个javascript只允许字母,数字,空格,_, - 在一个输入中:
var re = /^([a-zA-Z0-9 _-]+)$/;
if (!re.test(form.titulo.value)) {
alert("Error: Input contains invalid characters!");
form.titulo.focus();
return false;
}
Run Code Online (Sandbox Code Playgroud)
问题是,我也想允许'.所以我可以键入类似:Ana的房子,不要......我试着在正则表达式中添加'但是它不起作用:
/^([a-zA-Z0-9 _-']+)$/
Run Code Online (Sandbox Code Playgroud)
这是因为字符类中的连字符表示范围,除非它在结尾(显然不能是范围)或被转义.您也可以删除捕获组,因为在您的情况下不需要.
逃逸 -
/^[a-zA-Z0-9 _\-']+$/
Run Code Online (Sandbox Code Playgroud)-在课程的开头或结尾移动
/^[a-zA-Z0-9 _'-]+$/
Run Code Online (Sandbox Code Playgroud)演示
input {
color: green;
}
input:invalid {
color: red;
}Run Code Online (Sandbox Code Playgroud)
<input type="text" pattern="[a-zA-Z0-9 _\-']+" />Run Code Online (Sandbox Code Playgroud)
使用
/^([a-zA-Z0-9 _'-]+)$/
Run Code Online (Sandbox Code Playgroud)
如果-不是括号中的第一个或最后一个字符,则表示您正在选择一系列字符,例如当您执行a-z或更换时0-9.当你写_-'它意味着_和之间的所有字符'.
你也可以逃避-它,使其不具有特殊意义.
/^([a-zA-Z0-9 _\-']+)$/
Run Code Online (Sandbox Code Playgroud)
顺便说一句,您可以使用\w缩写a-zA-Z0-9_,因此您的正则表达式可以简化为:
/^[\w \-']+$/
Run Code Online (Sandbox Code Playgroud)