允许在javascript中使用正则表达式

Ric*_*Joe 0 javascript regex

我有一个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)

Tus*_*har 5

这是因为字符类中的连字符表示范围,除非它在结尾(显然不能是范围)或被转义.您也可以删除捕获组,因为在您的情况下不需要.

  1. 逃逸 -

    /^[a-zA-Z0-9 _\-']+$/
    
    Run Code Online (Sandbox Code Playgroud)
  2. -在课程的开头或结尾移动

    /^[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)


Bar*_*mar 5

使用

/^([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)