Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.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 如何删除子域中的非法字符?_Java_Replace_Subdomain_Illegal Characters - Fatal编程技术网

Java 如何删除子域中的非法字符?

Java 如何删除子域中的非法字符?,java,replace,subdomain,illegal-characters,Java,Replace,Subdomain,Illegal Characters,我正在使用Java6。我使用AmazonAWS库动态创建域。然而,我正在寻找一个可以从子域中去除非法字符的函数。例如,如果我的函数即将创建 dave'ssite.mydomain.com 我想将字符串“dave'ssite”传递给某个函数,该函数将去掉撇号,或隐藏在子域中的任何其他非法字符 我该怎么做?更具体的问题是,如何识别非法子域字符是什么?子域与域相同,因此最有可能允许的字符是A-Z A-Z 0-9和-。因此,您可以使用正则表达式 ... String s = "dave's-site.

我正在使用Java6。我使用AmazonAWS库动态创建域。然而,我正在寻找一个可以从子域中去除非法字符的函数。例如,如果我的函数即将创建

dave'ssite.mydomain.com
我想将字符串“dave'ssite”传递给某个函数,该函数将去掉撇号,或隐藏在子域中的任何其他非法字符


我该怎么做?更具体的问题是,如何识别非法子域字符是什么?

子域与域相同,因此最有可能允许的字符是
A-Z A-Z 0-9和-
。因此,您可以使用正则表达式

...
String s = "dave's-site.mydomain.com";

//prints daves-sitemydomaincom
System.out.println(s.replaceAll("[^A-Za-z0-9\\-]","")); 
...

这是我为游戏做的一些。它基本上是一样的,只是我用它来删除用户名中的无效字符

char[] validChars = {a, b, c, d, etc...};//Put all valid characters in this array, so for subdomains put all letters and numbers
public static String cleanString(String text){
    StringBuilder sb = new StringBuilder("");
    for(int i = 0;i < text.length();i++){
        for (int j = 0; j < validCharslength; j++) {
            if (validChars[j] == text.charAt(i)) {
                sb.append(text.charAt(i));
                break;
            }
        }
    }
    return sb.toString();
}
char[]validChars={a、b、c、d等//将所有有效字符放入该数组,因此对于子域,请放入所有字母和数字
公共静态字符串cleanString(字符串文本){
StringBuilder sb=新的StringBuilder(“”);
对于(int i=0;i

正如我在代码中的注释所说,char数组包含所有有效字符,其他任何字符都将被删除。请记住,his是一种返回方法。

我在这里偶然发现了一个c#解决方案,可以解决同样的问题,现在就在这里。看看c#LINQ做的多么优雅;)


但不确定规格中关于长度的说明

这个答案太简单了。首先,部分域名不允许以连字符开头,要验证域名部分,长度也是相关的。考虑到IDN,将允许的字符限制为a-z是错误的。@jarnbjo:有效点。长度,不在开头或结尾的连字符也需要验证。巴拉,在我接受之前,你能更新你的答案以反映jarnbjo所说的变化吗?
if (model.UserName.All(char.IsLetterOrDigit) && !model.UserName.StartsWith("-")) 
{ 
    //oh yeah, valid subdomain     
}