【问题标题】:@Pattern regex allowing only : numbers & empty String & numbers beginning by 0@Pattern 正则表达式仅允许:数字和空字符串以及以 0 开头的数字
【发布时间】:2016-12-05 19:47:26
【问题描述】:

我在我的实体中的字符串字段上使用@Pattern 注释,正则表达式只允许数字或空字符串,但我也需要允许以 0 开头的数字。

这是我现在使用的模式:

//..
@Pattern(message="Entrez un nombre" , regexp = "[+-]?(([1-9][0-9]*)|(0))([.,][0-9]+)?|(^$)")
private String BSCId;
//...

谢谢。

【问题讨论】:

  • 这个正则表达式对你不起作用?你有什么问题?
  • 试试regexp = "^(?:[+-]?[0-9]+(?:[,.][0-9]+)?)?$"
  • 或者,如果不允许使用 0 或 0,00,regexp = "^(?!0+(?:[.,]0+)?$)(?:[+-]?[0-9]+(?:[,.][0-9]+)?)?$"
  • @WiktorStribiżew 效果很好,谢谢。
  • 哪一个有效:)?

标签: java regex spring bean-validation


【解决方案1】:

试试这个:

^(?:[+-]?(\d+)([,.]\d+)?)?$

这允许数字以 0 开头,并且还允许通过使整个字符串可选的方式使字符串为空。

  • [+-]?(\d+) 匹配可选的 +- 然后匹配 1 到无穷大的数字
  • ([,.]\d+)? 匹配 ,.,然后匹配无穷大。将整个分数设为可选,以便整数也可以匹配。
  • (?:...)? 将所有内容设为可选(以便空字符串根据要求匹配),而不创建捕获组。

【讨论】:

  • 没用,但 Wiktor 已经回答了我的问题,谢谢。
  • 现在,这是我的建议的副本。你能至少解释一下为什么它应该起作用吗?
  • @nicael 我不是专家,但我不能在@Pattern 注释中使用^(?:[+-]?(\d+)([,.]\d+)?)?$
  • @Wiktor 我并不是要复制您的建议。这里没有很多好的变体,看起来我们已经交叉了变体。另外,正如您所见,您的作品有效,而我的作品无效。
  • @dwix:因为你必须使用双反斜杠。
猜你喜欢
  • 2011-09-16
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
  • 2016-12-02
相关资源
最近更新 更多