该方法应该只允许0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-
在 URI 字符串中使用 " " 字符。
问问题
6558 次
3 回答
36
这是普遍的共识:
小写字符串。
string = string.toLowerCase();
规范化所有字符并去掉所有变音符号(例如,é、ö、à 变为 e、o、a)。
string = Normalizer.normalize(string, Form.NFD).replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
替换所有剩余的非字母数字字符
-
并在必要时折叠。string = string.replaceAll("[^\\p{Alnum}]+", "-");
所以,总结一下:
public static String toPrettyURL(String string) {
return Normalizer.normalize(string.toLowerCase(), Form.NFD)
.replaceAll("\\p{InCombiningDiacriticalMarks}+", "")
.replaceAll("[^\\p{Alnum}]+", "-");
}
于 2011-01-03T01:37:51.570 回答
4
以下正则表达式将与您的算法执行相同的操作。我不知道图书馆可以做这种事情。
字符串 s = 输入 .replaceAll(" ?- ?","-") // 删除连字符周围的空格 .replaceAll("[ ']","-") // 把空格和引号变成连字符 .replaceAll("[^0-9a-zA-Z-]",""); // 删除不在我们允许的字符集中的所有内容
于 2011-01-02T23:20:42.400 回答
1
如果您想搜索更多信息,这些通常称为“slug”。
您可能想查看其他答案,例如如何从字符串创建 SEO 友好的破折号分隔 url?以及如何使 Django slugify 与 Unicode 字符串一起正常工作?
它们涵盖了 C# 和 Python,而不是 javascript,但对 slug 约定和您在制作它们时可能面临的问题(例如唯一性、unicode 规范化问题等)进行了一些与语言无关的讨论。
于 2011-01-03T01:49:26.813 回答