Javascript 名称的正则表达式模式在adobe cq5中不起作用

Javascript 名称的正则表达式模式在adobe cq5中不起作用,javascript,regex,validation,aem,forms,Javascript,Regex,Validation,Aem,Forms,我需要一个regex模式的名称字段中,我想允许字符a-z,a-z和'-和空白。我目前正在使用此代码,但它给出了一个错误 final String regexpattern = "/[a-zA-Z\s-']*/"; 您必须在\s之前添加另一个\,并为匹配开始和结束添加^和$ final String regexpattern = "/^[a-zA-Z\\s'-]*$/"; 您的正则表达式(当它不再格式不正确时-请参阅下面的如何修复)将始终匹配,因为您不使用锚(^-字符串的开头和$-字符串的结尾

我需要一个regex模式的名称字段中,我想允许字符a-z,a-z和'-和空白。我目前正在使用此代码,但它给出了一个错误

final String regexpattern = "/[a-zA-Z\s-']*/";

您必须在
\s
之前添加另一个
\
,并为匹配开始和结束添加
^
$

final String regexpattern = "/^[a-zA-Z\\s'-]*$/";
您的正则表达式(当它不再格式不正确时-请参阅下面的如何修复)将始终匹配,因为您不使用锚(
^
-字符串的开头和
$
-字符串的结尾)并使用
*
量词(尽可能多地匹配与前面子模式匹配的一个或多个符号)

但是,仅仅添加
^
$
不会修复该模式,因为您在C字符串(即字符串文本“…”中)中使用了1个反斜杠和
\s
。反斜杠被视为转义符号,不被考虑,因为
“\s”
是无效的转义序列。在正则表达式中的字符类内(即在
[…]
中),连字符创建一个范围。您的
s-'
创建了从
s
(十二月代码115)到
'
(十二月代码39)的范围。由于在字符类内的某个范围内,代码必须从最低到最高,因此会引发错误

你可以用

final String regexpattern = "/^[a-zA-Z\\s-']*$/";
这可能是因为速记类
\s
后面的连字符不创建范围,被视为文字。作为最佳实践,您可以像xdazz一样将其移动到角色类的末尾

关于你在评论中的补充问题:

我必须允许所有字符,不包括
^%*()#

只需使用一个求反字符类:一对方括号,内有一个起始
^

final String regexpattern = "/^[^<>%*()#!^?]*$/";
                              1 2        3
final String regexpatern=“/^[^%*()#!^?]*$/”;
1 2        3

这里,第一个
^
是字符串锚定的开始,第二个插入符号是字符类中字符的否定。第三个插入符号是一个文字符号
^

它是一个有效的正则表达式。您遇到了什么错误?您好xdazz,谢谢,它工作正常。您能帮我找一些正则表达式模式吗?我也不知道这些,比如如果我必须允许所有字符,不包括^%*()#!?