使用Spring Boot中的@Pattern注解进行正则表达式模式匹配

huangapple go评论62阅读模式
英文:

Regex pattern matching using @Pattern annotation in Spring Boot

问题

以下是翻译好的部分:

我想要接受只包含以下字符的标题: \/:*?"<>|

我尝试使用下面的方法,但对我不起作用

@Pattern(regexp = &quot;[^\\/:*?\&quot;&lt;&gt;|]&quot;, message = &quot;不合法&quot;)
private String title;

我在模式匹配方面还很新,请帮助我找到解决方案...

英文:

I want to accept only those titles which don't contain following characters: \/:*?"<>|

I tried using the below method, but it didn't work for me

@Pattern(regexp = &quot;[^\\/:*?\&quot;&lt;&gt;|]&quot;, message = &quot;Not valid&quot;)
private String title;

I am new in pattern matching so please help me with the solution...

答案1

得分: 1

一个良好的开端。@Pattern 注解定义了底层字符串应该匹配的模式。

> 被注解的字符序列必须与指定的正则表达式匹配。正则表达式遵循 Java 的正则表达式约定,参见 Pattern

在你的情况下,你只列出了不应该匹配的字符。你应该定义一个应该匹配的模式。

尝试这个(在 Regex101 上查看演示),注意 + 量词。

^[^\/:*?\&quot;&lt;&gt;|]+$

在 Java 中,请注意转义:

@Pattern(regexp = &quot;^[^\\/:*?\\\&quot;&lt;&gt;|]+$&quot;, message = &quot;Not valid&quot;)
private String title;
英文:

A good start. The @Pattern annotation defines the pattern the underlying String should match.

> The annotated CharSequence must match the specified regular expression. The regular expression follows the Java regular expression conventions see Pattern.

In your case, you only list the characters, that should not be matched. You should define a pattern to be matched instead.

Try this one (see Regex101 for a demo) and notice the + quantifier.

^[^\/:*?\&quot;&lt;&gt;|]+$

In Java, mind the escaping:

@Pattern(regexp = &quot;^[^\\/:*?\\\&quot;&lt;&gt;|]+$&quot;, message = &quot;Not valid&quot;)
private String title;

huangapple
  • 本文由 发表于 2023年2月8日 20:32:03
  • 转载请务必保留本文链接:https://go.coder-hub.com/75385838.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定