【发布时间】:2016-01-15 12:41:29
【问题描述】:
我正在使用 JDK 1.7
在 java 中做一些与 ldap 相关的测试我有一个配置文件,我正在从中读取一个属性的值,例如“dc=domain1,dc=com”,以便稍后将其传递给 ldap 以进行搜索操作。
这里我想验证来自属性文件的值,该值应该只是 ASCII 或 Base64 编码的 UTF-8 字符串。
我已经编写了以下正则表达式来验证字符串,但似乎有一些问题。
这是我的示例代码:
public class ValidateDN {
public static void main(String[] args) {
String istr = "dc=domain1,dc=com";
String myregex = "^dc=[a-zA-Z0-9\\-\\.]*[,dc=[a-zA-Z0-9\\-\\.]*]*";
if (istr.matches(myregex)){
System.out.println("String matches");
}
else{
System.out.println("String not matching");
}
}
}
它应该传递所有字符串,例如:
dc=com
dc=domain1,dc=com
dc=domain2,dc=domain1,dc=com
值应该失败:
dc=domain1,dc=com,d
dc=domain1,dc=com,dc
(不完整的键或无效的语法)
谁能建议在这里应该做些什么来正确验证这一点?
【问题讨论】:
-
它失败是因为 com,dc 中间有一个 , 对吧?
-
是的,它应该会失败......但是这个正则表达式通过它并打印为“字符串匹配”
-
嗯,我会选择一个更简单的解决方案。用逗号
istr.split(",")分割字符串,然后为数组的每个元素检查是否有一个字符串后跟=。是的,执行可能需要更多时间,但维护会容易得多。 -
@AmitG,您的代码似乎没有进行任何 ASCII 检查或 base64 验证
-
你能指导我如何有效地进行这项检查吗?
标签: java regex validation