我正在使用 Java 6。使用 Amazon AWS 库,我正在动态创建域。但是,我正在寻找一种可以从子域中去除非法字符的功能。例如,如果我的函数即将创建
dave'ssite.mydomain.com
我想将字符串“dave'ssite”传递给某个函数,该函数将去掉撇号或潜伏在子域中的任何其他非法字符。
我该怎么做?更具体的问题是,如何识别非法子域字符是什么?
我正在使用 Java 6。使用 Amazon AWS 库,我正在动态创建域。但是,我正在寻找一种可以从子域中去除非法字符的功能。例如,如果我的函数即将创建
dave'ssite.mydomain.com
我想将字符串“dave'ssite”传递给某个函数,该函数将去掉撇号或潜伏在子域中的任何其他非法字符。
我该怎么做?更具体的问题是,如何识别非法子域字符是什么?
子域与域相同,因此最有可能允许的字符是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\\-]",""));
...
我偶然发现这里正在寻找相同问题的 ac# 解决方案,而这里就是。看看 c# LINQ 是多么优雅;)
if (model.UserName.All(char.IsLetterOrDigit) && !model.UserName.StartsWith("-"))
{
//oh yeah, valid subdomain
}
不过,不确定规范中关于长度的内容。
这是我为游戏制作的一些内容。除了我用它来从用户名中删除无效字符外,它基本上是一样的。
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 数组包含所有有效字符,其他任何字符都将被删除。请记住,他是一种返回方法。