name的regex模式在adobecq5中不起作用



我需要一个正则表达式模式用于名称字段,其中我希望允许字符a-z、a-z和'-和空白。我目前正在使用这段代码,但它给出了一个错误。

final String regexpattern = "/[a-zA-Zs-']*/";

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

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

您的正则表达式(当它不再格式错误时-请参阅下面的修复方法)将始终匹配,因为您不使用锚点(^-字符串的开头,$-字符串的结尾),也不使用*量词(匹配与前面的子模式匹配的一个或多个符号,尽可能多)。

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

你可以只使用

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

这是可能的,因为简写类s后面的连字符不会创建范围,而是被视为文字。作为最佳实践,您可以像xdazz那样将其移动到角色类的末尾。

关于您在评论中的附加问题:

我必须允许除^<>%*()#!?之外的所有字符

只需使用一个否定的字符类:一对方括号,里面有一个起始^

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

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

相关内容

  • 没有找到相关文章

最新更新