Java 如何删除子域中的非法字符?
我正在使用Java6。我使用AmazonAWS库动态创建域。然而,我正在寻找一个可以从子域中去除非法字符的函数。例如,如果我的函数即将创建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.
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
}