我正在使用Java 6.使用Amazon AWS库,我正在动态创建域。但是,我正在寻找一个可以从子域中删除非法字符的函数。例如。如果我的功能即将创建
dave'ssite.mydomain.com
我想将字符串“dave'ssite”传递给某个函数,该函数会删除撇号,或者子域中潜伏的其他非法字符。
我该怎么办?更具体的问题是,如何识别非法子域名是什么?
答案 0 :(得分:1)
子域名与域名相同,因此很可能允许的字符为A-Z a-z 0-9 and -
。因此,您可以使用正则表达式。
...
String s = "dave's-site.mydomain.com";
//prints daves-sitemydomaincom
System.out.println(s.replaceAll("[^A-Za-z0-9\\-]",""));
...
答案 1 :(得分:0)
以下是我为游戏制作的一些内容。除了用它来删除用户名中的无效字符外,它基本上是一样的。
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数组包含所有有效字符,其他任何内容都将被删除。请记住,他是一种回归方法。
答案 2 :(得分:0)
我在这里偶然发现了寻找同一问题的c#解决方案,而且好在这里。看看c#LINQ如何优雅;)
if (model.UserName.All(char.IsLetterOrDigit) && !model.UserName.StartsWith("-"))
{
//oh yeah, valid subdomain
}
不确定规格中有关长度的内容。