正则表达式可以匹配大于1080的任何整数?

时间:2019-12-01 03:22:53

标签: regex

我正在尝试为大于1080的任何整数提供一个正则表达式。因此以下数字将匹配:

@Entity
public class Volunteer extends Person{
//  @Access(AccessType.PROPERTY)
    @OneToMany(mappedBy="volunteer", cascade = { CascadeType.ALL })
    private Set<Event> event;
    public Set<Event> getEvent() {
        return this.event;
    }
    public void setEvent(Set<Event> events) {
        this.event = events;
    }
    // add this for service file error
    private Set<Volunteer> volunteerName;
    public void setVolunteer(Set<Volunteer> volunteerNames) {
        this.volunteerName = volunteerNames;
    }
    public Set<Volunteer> getVolunteers() {
        return this.volunteerName;
    }
}

我碰到过这篇文章:https://codeshare.co.uk/blog/regular-expression-regex-for-a-number-greater-than-1200/,但不适用于1300之类的数字。

1 个答案:

答案 0 :(得分:1)

使用正则表达式这样做是一个糟糕的主意,但是如果您有真正的需求(例如某些只允许您在过滤器中使用正则表达式的软件),则有可能。让我们一次迈出一步,让我们从大数字到小数字工作,因为它使思考变得更容易:

  • 任何至少五位数的数字都可以:[1-9][0-9]{4,}
  • 任何数字2,000-9,999都可以:[2-9][0-9]{3}
  • 任何1,100-1,999都可以:1[1-9][0-9]{2}
  • 任何1,090-1,099都可以:109[0-9]
  • 任何1,081-1,089都可以:108[1-9]
  • 剩下的就是数字<= 1080,或者不是数字。

以相反的顺序将它们放在一起,^(?:108[1-9]|109[0-9]|1[1-9][0-9]{2}|[2-9][0-9]{3}|[1-9][0-9]{4,})$应该可以工作。如果您希望数字格式不那么宽松,可以允许可选的前导+或任意数量的前导0(但我们正在检查的部分中不包括它们)。那让我们

^\+?0*(?:108[1-9]|109[0-9]|1[1-9][0-9]{2}|[2-9][0-9]{3}|[1-9][0-9]{4,})$