Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 需要基于ASCII和BASE64编码UTF-8字符串验证域的帮助吗_Java_Regex_Validation - Fatal编程技术网

Java 需要基于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)

我正在使用JDK1.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
(键不完整或语法无效)


有人能建议应该做些什么来正确验证这一点吗?

我相信您遇到的问题是由于您的正则表达式的结构造成的

你的正则表达式:

"^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验证。您能指导我如何有效地进行此检查吗?