繁体   English   中英

Java 正则表达式数据库和特殊字符

[英]Java regex db and special character

我从未记录的 java 代码继承。 似乎我有一个数据库,其中包含这样的代码 050.09.89 和 java 后端代码中的正则表达式测试。

使用对应于数据库表 getCode.matches() 的 object 现在我必须更改正则表达式以匹配两种代码 050.09.89 或 050/09/89 但是当它是 050/09/89 时我有 500 个内部错误,我认为这是由于数据库只包含 050.09.89 类型的代码。

问题来自正则表达式还是数据库上下文? 以及如何在不更改数据库的情况下解决问题? 此致

private void checkNotifyAllowed(Deployment deployment) {

if (!deployment.getCode().matches(regex:"[0-9]{3}\\/[0-9]{2}\\/[0-9]{2}$|[0-9]{3}\\.[0-9]{2}\\.[0-9]{2}$")){

throw new BusinessException("Invalid billing code, should be nnn.nn.nn or nnn/nn/nn");
}}

现在我必须更改正则表达式以匹配两种代码 050.09.89 或 050/09/89 但是当它是 050/09/89 时我有 500 个内部错误,我认为这是由于数据库只包含 050.09.89 类型代码。

您共享的代码块中的正则表达式实际上已经构建,因此它接受格式XXX/XX/XX以及YYY.YY.YY - pipe 字符| 中间将两种可能性分开。 那里的\\用于转义特殊字符。 我认为/根本不需要转义,不像. 这是正则表达式中的特殊字符,必须进行转义,以便匹配文字点字符而不是任何单个字符。 就像 Wiktor 建议的那样:将\\/替换为/

但是,500 内部错误也可能指向其他问题,因为/也是一种特殊字符。 也许它混淆了 web 服务器,因为例如通过带有/字符的 GET 请求的输入参数被视为子目录访问请求。 如果可能,请检查有关此问题的 web 服务器日志。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM