ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/RegexConstants.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/factory/RegexPatternPoolFactory.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/regex/RegexUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/regex/RegexValidator.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysDictTypeBo.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/RegexConstants.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,49 @@ package org.dromara.common.core.constant; import cn.hutool.core.lang.RegexPool; /** * å¸¸ç¨æ£å表达å¼å符串 * <p> * å¸¸ç¨æ£å表达å¼éåï¼æ´å¤æ£åè§: https://any86.github.io/any-rule/ * * @author Feng */ public interface RegexConstants extends RegexPool { /** * åå ¸ç±»åå¿ é¡»ä»¥åæ¯å¼å¤´ï¼ä¸åªè½ä¸ºï¼å°ååæ¯ï¼æ°åï¼ä¸æ»çº¿ï¼ */ public static final String DICTIONARY_TYPE = "^[a-z][a-z0-9_]*$"; /** * 身份è¯å·ç ï¼å6ä½ï¼ */ public static final String ID_CARD_LAST_6 = "^(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$"; /** * QQå·ç */ public static final String QQ_NUMBER = "^[1-9][0-9]\\d{4,9}$"; /** * 鮿¿ç¼ç */ public static final String POSTAL_CODE = "^[1-9]\\d{5}$"; /** * 注åè´¦å· */ public static final String ACCOUNT = "^[a-zA-Z][a-zA-Z0-9_]{4,15}$"; /** * å¯ç ï¼å å«è³å°8个å符ï¼å æ¬å¤§å忝ãå°ååæ¯ãæ°ååç¹æ®å符 */ public static final String PASSWORD = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$"; /** * éç¨ç¶æï¼0表示æ£å¸¸ï¼1表示åç¨ï¼ */ public static final String STATUS = "^[01]$"; } ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/factory/RegexPatternPoolFactory.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,52 @@ package org.dromara.common.core.factory; import cn.hutool.core.lang.PatternPool; import org.dromara.common.core.constant.RegexConstants; import java.util.regex.Pattern; /** * æ£åè¡¨è¾¾å¼æ¨¡å¼æ± å·¥å * <p>åå§åçæ¶åå°æ£å表达å¼å å ¥ç¼åæ± å½ä¸</p> * <p>æé«æ£å表达å¼çæ§è½ï¼é¿å éå¤ç¼è¯ç¸åçæ£å表达å¼</p> * * @author 21001 */ public class RegexPatternPoolFactory extends PatternPool { /** * åå ¸ç±»åå¿ é¡»ä»¥åæ¯å¼å¤´ï¼ä¸åªè½ä¸ºï¼å°ååæ¯ï¼æ°åï¼ä¸æ»çº¿ï¼ */ public static final Pattern DICTIONARY_TYPE = get(RegexConstants.DICTIONARY_TYPE); /** * 身份è¯å·ç ï¼å6ä½ï¼ */ public static final Pattern ID_CARD_LAST_6 = get(RegexConstants.ID_CARD_LAST_6); /** * QQå·ç */ public static final Pattern QQ_NUMBER = get(RegexConstants.QQ_NUMBER); /** * 鮿¿ç¼ç */ public static final Pattern POSTAL_CODE = get(RegexConstants.POSTAL_CODE); /** * 注åè´¦å· */ public static final Pattern ACCOUNT = get(RegexConstants.ACCOUNT); /** * å¯ç ï¼å å«è³å°8个å符ï¼å æ¬å¤§å忝ãå°ååæ¯ãæ°ååç¹æ®å符 */ public static final Pattern PASSWORD = get(RegexConstants.PASSWORD); /** * éç¨ç¶æï¼0表示æ£å¸¸ï¼1表示åç¨ï¼ */ public static final Pattern STATUS = get(RegexConstants.STATUS); } ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/regex/RegexUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,30 @@ package org.dromara.common.core.utils.regex; import cn.hutool.core.util.ReUtil; import org.dromara.common.core.constant.RegexConstants; /** * æ£åç¸å ³å·¥å ·ç±» * * @author Feng */ public final class RegexUtils extends ReUtil { /** * ä»è¾å ¥åç¬¦ä¸²ä¸æåå¹é çé¨åï¼å¦ææ²¡æå¹é åè¿åé»è®¤å¼ * * @param input è¦æåçè¾å ¥å符串 * @param regex ç¨äºå¹é çæ£å表达å¼ï¼å¯ä»¥ä½¿ç¨ {@link RegexConstants} ä¸å®ä¹ç常é * @param defaultInput å¦ææ²¡æå¹é æ¶è¿åçé»è®¤å¼ * @return 妿æ¾å°å¹é çé¨åï¼åè¿åå¹é çé¨åï¼å¦åè¿åé»è®¤å¼ */ public static String extractFromString(String input, String regex, String defaultInput) { try { return ReUtil.get(regex, input, 1); } catch (Exception e) { return defaultInput; } } } ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/regex/RegexValidator.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,105 @@ package org.dromara.common.core.utils.regex; import cn.hutool.core.exceptions.ValidateException; import cn.hutool.core.lang.Validator; import org.dromara.common.core.factory.RegexPatternPoolFactory; import java.util.regex.Pattern; /** * æ£ååæ®µæ ¡éªå¨ * 主è¦éªè¯å段éç©ºãæ¯å¦ä¸ºæ»¡è¶³æå®æ ¼å¼ç * * @author Feng */ public class RegexValidator extends Validator { /** * åå ¸ç±»åå¿ é¡»ä»¥åæ¯å¼å¤´ï¼ä¸åªè½ä¸ºï¼å°ååæ¯ï¼æ°åï¼ä¸æ»çº¿ï¼ */ public static final Pattern DICTIONARY_TYPE = RegexPatternPoolFactory.DICTIONARY_TYPE; /** * 身份è¯å·ç ï¼å6ä½ï¼ */ public static final Pattern ID_CARD_LAST_6 = RegexPatternPoolFactory.ID_CARD_LAST_6; /** * QQå·ç */ public static final Pattern QQ_NUMBER = RegexPatternPoolFactory.QQ_NUMBER; /** * 鮿¿ç¼ç */ public static final Pattern POSTAL_CODE = RegexPatternPoolFactory.POSTAL_CODE; /** * 注åè´¦å· */ public static final Pattern ACCOUNT = RegexPatternPoolFactory.ACCOUNT; /** * å¯ç ï¼å å«è³å°8个å符ï¼å æ¬å¤§å忝ãå°ååæ¯ãæ°ååç¹æ®å符 */ public static final Pattern PASSWORD = RegexPatternPoolFactory.PASSWORD; /** * éç¨ç¶æï¼0表示æ£å¸¸ï¼1表示åç¨ï¼ */ public static final Pattern STATUS = RegexPatternPoolFactory.STATUS; /** * æ£æ¥è¾å ¥çè´¦å·æ¯å¦å¹é é¢å®ä¹çè§å * * @param value è¦éªè¯çè´¦å· * @return å¦æè´¦å·ç¬¦åè§åï¼è¿å trueï¼å¦åï¼è¿å falseã */ public static boolean isAccount(CharSequence value) { return isMatchRegex(ACCOUNT, value); } /** * éªè¯è¾å ¥çè´¦å·æ¯å¦ç¬¦åè§åï¼å¦æä¸ç¬¦åï¼åæåº ValidateException å¼å¸¸ * * @param value è¦éªè¯çè´¦å· * @param errorMsg éªè¯å¤±è´¥æ¶æåºçå¼å¸¸æ¶æ¯ * @param <T> CharSequence çåç±»å * @return 妿éªè¯éè¿ï¼è¿åè¾å ¥çè´¦å· * @throws ValidateException 妿éªè¯å¤±è´¥ */ public static <T extends CharSequence> T validateAccount(T value, String errorMsg) throws ValidateException { if (!isAccount(value)) { throw new ValidateException(errorMsg); } return value; } /** * æ£æ¥è¾å ¥çç¶ææ¯å¦å¹é é¢å®ä¹çè§å * * @param value è¦éªè¯çç¶æ * @return å¦æç¶æç¬¦åè§åï¼è¿å trueï¼å¦åï¼è¿å falseã */ public static boolean isStatus(CharSequence value) { return isMatchRegex(STATUS, value); } /** * éªè¯è¾å ¥çç¶ææ¯å¦ç¬¦åè§åï¼å¦æä¸ç¬¦åï¼åæåº ValidateException å¼å¸¸ * * @param value è¦éªè¯çç¶æ * @param errorMsg éªè¯å¤±è´¥æ¶æåºçå¼å¸¸æ¶æ¯ * @param <T> CharSequence çåç±»å * @return 妿éªè¯éè¿ï¼è¿åè¾å ¥çç¶æ * @throws ValidateException 妿éªè¯å¤±è´¥ */ public static <T extends CharSequence> T validateStatus(T value, String errorMsg) throws ValidateException { if (!isStatus(value)) { throw new ValidateException(errorMsg); } return value; } } ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysDictTypeBo.java
@@ -6,6 +6,7 @@ import jakarta.validation.constraints.Size; import lombok.Data; import lombok.EqualsAndHashCode; import org.dromara.common.core.constant.RegexConstants; import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.system.domain.SysDictType; @@ -37,7 +38,7 @@ */ @NotBlank(message = "åå ¸ç±»åä¸è½ä¸ºç©º") @Size(min = 0, max = 100, message = "åå ¸ç±»åç±»åé¿åº¦ä¸è½è¶ è¿{max}个å符") @Pattern(regexp = "^[a-z][a-z0-9_]*$", message = "åå ¸ç±»åå¿ é¡»ä»¥åæ¯å¼å¤´ï¼ä¸åªè½ä¸ºï¼å°ååæ¯ï¼æ°åï¼ä¸æ»çº¿ï¼") @Pattern(regexp = RegexConstants.DICTIONARY_TYPE, message = "åå ¸ç±»åå¿ é¡»ä»¥åæ¯å¼å¤´ï¼ä¸åªè½ä¸ºï¼å°ååæ¯ï¼æ°åï¼ä¸æ»çº¿ï¼") private String dictType; /**