Java 需要基于ASCII和BASE64编码UTF-8字符串验证域的帮助吗
我正在使用JDK1.7在java中进行一些与ldap相关的测试 我有一个配置文件,从中读取一个属性的值,比如“dc=domain1,dc=com”,以便稍后将其传递给ldap进行搜索操作 在这里,我想验证来自属性文件的值,该值应仅为ASCII或Base64编码的UTF-8字符串 我已经编写了以下正则表达式来验证字符串,但似乎它有一些问题 以下是我的示例代码:Java 需要基于ASCII和BASE64编码UTF-8字符串验证域的帮助吗,java,regex,validation,Java,Regex,Validation,我正在使用JDK1.7在java中进行一些与ldap相关的测试 我有一个配置文件,从中读取一个属性的值,比如“dc=domain1,dc=com”,以便稍后将其传递给ldap进行搜索操作 在这里,我想验证来自属性文件的值,该值应仅为ASCII或Base64编码的UTF-8字符串 我已经编写了以下正则表达式来验证字符串,但似乎它有一些问题 以下是我的示例代码: public class ValidateDN { public static void main(String[] args)
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
(键不完整或语法无效)
有人能建议应该做些什么来正确验证这一点吗?我相信您遇到的问题是由于您的正则表达式的结构造成的 你的正则表达式:
"^dc=[a-zA-Z0-9\\-\\.]*[,dc=[a-zA-Z0-9\\-\\.]*]*"
在第二个字符类中有一个缺陷。具体而言:
(`[,dc=[a-zA-Z0-9\\-\\.]*]*.
应将其更改为(,dc=[a-zA-Z0-9\\-\\.]*)*
,以使文字”,dc=“
匹配以及内部字符类匹配
应该工作的完整正则表达式是:
^dc=[a-zA-Z0-9\\-\\.]*(,dc=[a-zA-Z0-9\\-\\.]*)*
我相信你的问题是由于你的正则表达式的结构 你的正则表达式:
"^dc=[a-zA-Z0-9\\-\\.]*[,dc=[a-zA-Z0-9\\-\\.]*]*"
在第二个字符类中有一个缺陷。具体而言:
(`[,dc=[a-zA-Z0-9\\-\\.]*]*.
应将其更改为(,dc=[a-zA-Z0-9\\-\\.]*)*
,以使文字”,dc=“
匹配以及内部字符类匹配
应该工作的完整正则表达式是:
^dc=[a-zA-Z0-9\\-\\.]*(,dc=[a-zA-Z0-9\\-\\.]*)*
您的正则表达式中有一个重大错误-您使用的是方括号而不是括号。方括号表示“任何字符”,而不是字符序列 此外,您的正则表达式可以简化为:
(dc=[\w-]+,?)*
作为LDAP DNS可能包含空格,您可能需要考虑使用:
(\s*dc\s*=\s*[\w-]+\s*,?)*
在插入代码时,请记住根据需要转义斜杠。您的正则表达式中有一个重大错误-您使用的是方括号而不是括号。方括号表示“任何字符”,而不是字符序列 此外,您的正则表达式可以简化为:
(dc=[\w-]+,?)*
作为LDAP DNS可能包含空格,您可能需要考虑使用:
(\s*dc\s*=\s*[\w-]+\s*,?)*
<>记住在插入代码时要避免斜杠。它失败了,因为com,DC在中间,右边,是的,应该失败。但是这个正则表达式传递它并以“字符串匹配”的形式打印。嗯,我会选择一个更简单的解决方案。在逗号上拆分字符串。拆分(“,”),然后为数组的每个元素检查是否有一个字符串后跟
=
。是的,它可能需要更多的时间来执行,但是维护会容易得多。@ AmitG,您的代码似乎不做任何ASCII检查或Base64验证。您能指导我如何高效地检查这一点吗?它失败了,因为COM,DC在中间,对吗?是的,它应该失败……但是这个正则表达式传递它并以“字符串匹配”的形式打印。嗯,我会选择一个更简单的解决方案。在逗号上拆分字符串。拆分(“,”),然后为数组的每个元素检查是否有一个字符串后跟=
。是的,它可能需要更多的时间来执行,但维护会容易得多。@AmitG,您的代码似乎没有进行任何ASCII检查或base64验证。您能指导我如何有效地进行此检查吗?