You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求符合SEPA规则的Java 17兼容正则表达式

SEPA 合规正则表达式(兼容Java 17)

以下是完全符合你需求的正则表达式,适配Java 17环境:

^(?!/)(?!.*//)[a-zA-Z0-9/\-?:().,'+ ]+(?<!/)$

规则拆解

  • ^(?!/):确保字符串不以/开头
  • (?!.*//):确保字符串不包含连续的//
  • [a-zA-Z0-9/\-?:().,'+ ]+:匹配所有允许的字符,包括:
    • 大小写英文字母、数字
    • 指定符号:/ - ? : ( ) . , ' +
    • 空格
  • (?<!/):确保字符串不以/结尾
  • ^ 和 $:锚定整个字符串,确保从开头到结尾完全匹配规则

Java 代码适配说明

在Java字符串中,反斜杠需要双重转义,所以实际使用的正则字符串应为:

"^(?!/)(?!.*//)[a-zA-Z0-9/\\-?:().,'+ ]+(?<!/)$"

验证示例

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class SepaValidator {
    private static final Pattern SEPA_VALIDATOR = Pattern.compile("^(?!/)(?!.*//)[a-zA-Z0-9/\\-?:().,'+ ]+(?<!/)$");

    public static boolean validate(String input) {
        return input != null && SEPA_VALIDATOR.matcher(input).matches();
    }

    public static void main(String[] args) {
        // 测试用例
        System.out.println(validate("John Doe (DE) +49 123/456-789")); // 有效,输出true
        System.out.println(validate("/Invalid Start")); // 以/开头,输出false
        System.out.println(validate("Invalid End/")); // 以/结尾,输出false
        System.out.println(validate("Contains//Double Slash")); // 含连续//,输出false
        System.out.println(validate("Valid, String. With? All: Allowed 'Symbols'")); // 有效,输出true
    }
}

常见问题排查

之前的正则无效可能是以下原因:

  1. 转义错误:Java中-在字符集里如果不放在末尾或转义,会被解析为字符范围(比如a-z),导致符号匹配异常
  2. 未覆盖所有规则:只处理了开头/结尾的/,没检查连续//;或者反之
  3. 未锚定字符串:缺少^和$,导致部分匹配通过,而非整个字符串符合规则

内容的提问来源于stack exchange,提问作者Marco_Frost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 18:53:22