Java如何在Spring EL中使用正则表达式进行模式匹配?

在这个Spring Expression Language示例中,我们将学习如何使用正则表达式或regex来检查文本是否匹配特定模式。Spring EL支持使用matches运算符的正则表达式。

该matches运营商将检查值具有由正则表达式的字符串定义的模式,并返回评价结果作为一个布尔值true,如果文本的正则表达式匹配或false否则。

例如,我们可以使用matches运算符来检查给定的电子邮件地址是否为有效的电子邮件地址。如以下示例所示:

<property name="emailValid" 
          value="#{user.email matches '^[_A-Za-z0-9-]+(.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(.[A-Za-z0-9]+)*(.[A-Za-z]{2,})$'}"/>

此配置将评估user.email属性,以检查电子邮件模式是否与给定的正则表达式匹配。如果匹配,则该emailValid属性将设置为,true否则为false。

让我们看完整的例子。这是spring配置文件,Userbean和用于运行配置文件的简单类。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="user">
        <constructor-arg name="email" value="nhooo@gmail.com"/>
        <property name="emailValid"
                  value="#{user.email matches '^[_A-Za-z0-9-]+(.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(.[A-Za-z0-9]+)*(.[A-Za-z]{2,})$'}"/>
    </bean>

    <bean id="user2">
        <constructor-arg name="email" value="nhooo.at.gmail.dot.com"/>
        <property name="emailValid"
                  value="#{user2.email matches '^[_A-Za-z0-9-]+(.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(.[A-Za-z0-9]+)*(.[A-Za-z]{2,})$'}"/>
    </bean>

</beans>

该Userbean是一个简单的POJO有两个属性,一个字符串email属性和一个布尔值validEmail属性。

package org.nhooo.example.spring.el;

public class User {
    private String email;
    private boolean emailValid;

    public User() {
    }

    public User(String email) {
        this.email = email;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public boolean isEmailValid() {
        return emailValid;
    }

    public void setEmailValid(boolean emailValid) {
        this.emailValid = emailValid;
    }
}

最后是应用程序类。

package org.nhooo.example.spring.el;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpELRegexExample {
    public static void main(String[] args) {
        ApplicationContext context =
            new ClassPathXmlApplicationContext("spel-regex.xml");

        User user = (User) context.getBean("user");
        System.out.println("user.getEmail()     = " + user.getEmail());
        System.out.println("user.isEmailValid() = " + user.isEmailValid());

        User user2 = (User) context.getBean("user2");
        System.out.println("user.getEmail()     = " + user2.getEmail());
        System.out.println("user.isEmailValid() = " + user2.isEmailValid());
    }
}

当我们运行代码时,我们将获得以下结果:

user.getEmail()     = nhooo@gmail.com
user.isEmailValid() = true
user.getEmail()     = nhooo.at.gmail.dot.com
user.isEmailValid() = false