Java 中的 Sip URI 验证

Sip URI validation in Java

我有以下代码来验证 sip:uri 格式字符串:

private final static Pattern SIP_URI_PATTERN = Pattern.compile("^(sip(?:s)?):(?:[^:]*(?::[^@]*)?@)?([^:@]*)(?::([0-9]*))?$", Pattern.CASE_INSENSITIVE);

public static boolean isValidURI(String address){
    if(address == null)
        return false;

    return address != null && address.length() <= 65 && SIP_URI_PATTERN.matcher(address).matches();
}

我不是专家,所以我想我在这里遗漏了一些东西,当我提交这个字符串时,它 returns true:

sip:4563214567@example.com

sip:4563214567@XX.XX.XX.XX -> XX = IP 地址

当我提交这个字符串时,它 return 也是正确的,但是 应该 return 错误 因为缺少 @:

sip:4563214567example.com

有什么想法吗?

我觉得这样检查有效的IP地址或域名更方便。

sip:[0-9]*@((\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4}\b)|((([a-zA-Z]{1})|([a-zA-Z]{1}[a-zA-Z]{1})|([a-zA-Z]{1}[0-9]{1})|([0-9]{1}[a-zA-Z]{1})|([a-zA-Z0-9][a-zA-Z0-9-_]{1,61}[a-zA-Z0-9]))\.([a-zA-Z]{2,6}|[a-zA-Z0-9-]{2,30}\.[a-zA-Z]{2,3})))

Demo


以Java形式,

private final static Pattern SIP_URI_PATTERN =
            Pattern.compile("sip:[0-9]*@((\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4}\b)|((([a-zA-Z]{1})|([a-zA-Z]{1}[a-zA-Z]{1})|([a-zA-Z]{1}[0-9]{1})|([0-9]{1}[a-zA-Z]{1})|([a-zA-Z0-9][a-zA-Z0-9-_]{1,61}[a-zA-Z0-9]))\.([a-zA-Z]{2,6}|[a-zA-Z0-9-]{2,30}\.[a-zA-Z]{2,3})))",
                    Pattern.CASE_INSENSITIVE);