javascript将字符串转换为css的安全类名

javascript将字符串转换为css的安全类名,javascript,jquery,Javascript,Jquery,我相信这一定是问过,但在搜索中找不到任何。 确保从字符串中删除所有非安全字符以允许在CSS类名中使用的最快方法是什么?如果您指的是以下符号 !"#$%&'()*+,./:;<=>?@[\]^`{|}~ !"#$%&'()*+,./:;?@[\]^`{|}~ 然后什么都不做就可以了: names = names.replace(/[!\"#$%&'\(\)\*\+,\.\/:;<=>\?\@\[\\\]\^`\{\|\}~]/g, ''); names

我相信这一定是问过,但在搜索中找不到任何。
确保从字符串中删除所有非安全字符以允许在CSS类名中使用的最快方法是什么?

如果您指的是以下符号

!"#$%&'()*+,./:;<=>?@[\]^`{|}~
!"#$%&'()*+,./:;?@[\]^`{|}~
然后什么都不做就可以了:

names = names.replace(/[!\"#$%&'\(\)\*\+,\.\/:;<=>\?\@\[\\\]\^`\{\|\}~]/g, '');
names=names.replace(/[!\“\$%”和“\(\)\*\+,\.\/:;\?\@\[\\\]\^`{\\\\\\\}]/g');
(我可能在其中添加了额外的或不够的转义字符)

这是一本书


但正如您所知,并不是所有这些符号都是“不安全的”,您可以在针对类名()时转义符号。

我会替换任何不是小写字母或数字的符号,然后我会添加一个特殊前缀,以避免与用于其他目的的类名发生冲突。例如,这里有一种可能的方法:

function makeSafeForCSS(name) {
    return name.replace(/[^a-z0-9]/g, function(s) {
        var c = s.charCodeAt(0);
        if (c == 32) return '-';
        if (c >= 65 && c <= 90) return '_' + s.toLowerCase();
        return '__' + ('000' + c.toString(16)).slice(-4);
    });
}

// shows "prefix_c_a_p_s-numb3rs-__0024ymbols"
alert("prefix" + makeSafeForCSS("CAPS numb3rs $ymbols"));
函数makeSafeForCSS(名称){
返回名称。替换(/[^a-z0-9]/g,函数{
var c=s.charCodeAt(0);
如果(c==32)返回“-”;

如果(c>=65&&c您可以从django尝试
urlify.js

从以下位置获取:
如果有人对这种咖啡方式感兴趣:

window.make_safe_for_css = (name) ->
    name.replace /[^a-z0-9]/g, (s) ->
        c = s.charCodeAt(0)
        if c == 32 then return '-'
        if c >= 65 && c <= 90 then return '_' + s.toLowerCase()
        '__' + '000' + c.toString(16).slice -4
window.make_safe_for_css=(name)->
name.replace/[^a-z0-9]/g,(s)->
c=s.charCodeAt(0)
如果c==32,则返回“-”

如果c>=65&&c我将其用于选择器、ID或类名称:

String.prototype.safeCSSId=function(){
返回组件(此)
.toLowerCase()
.替换(/\.|%[0-9a-z]{2}/gi');
}
console.log(“dæmon在细节中。”.safeCSSId());
与jQuery:

$.escapeSelector(stringToEscape);

编辑:误解了原始问题。例如,在按类名查询元素时,可以使用此选项,但不能用于生成类名。

此选项无法捕捉国际字符(例如,a、è、ì、ò、ù、À、È、Ì、Ò、Ù).@NexusRex这些都可以在类名中使用。事实上,如果正确转义,这现在..不会捕获空格。
\s
添加到正则表达式中,可以解决这个问题,而无需额外转义:
/[!“\$%&'()*+,./:;?@[\\\]^`{124}]/g
最快?