Разрешенные символы для идентификаторов CSS

29
задан BalusC 7 July 2010 в 17:15
поделиться

1 ответ

Кодировка не имеет значения. Разрешенные символы имеют большее значение. Проверьте спецификацию CSS . Вот ссылка на релевантность:

В CSS идентификаторы (включая имена элементов, классы и идентификаторы в селекторах ) могут содержать только символы [a-zA-Z0-9] и ISO 10646 символов U + 00A0 и выше, плюс дефис ( - ) и подчеркивание ( _ ); они не могут начинаться с цифры, двух дефисов или дефиса, за которым следует цифра. Идентификаторы также могут содержать экранированные символы и любой символ ISO 10646 в виде числового кода (см. Следующий пункт). Например, идентификатор «B&W?» может быть записан как «B \ & W \?» или «B \ 26 W \ 3F» .

Обновление : Что касается вопроса о регулярном выражении, вы можете найти грамматику здесь :

ident      -?{nmstart}{nmchar}*

, которая содержит части:

nmstart    [_a-z]|{nonascii}|{escape}
nmchar     [_a-z0-9-]|{nonascii}|{escape}
nonascii   [\240-\377]
escape     {unicode}|\\[^\r\n\f0-9a-f]
unicode    \\{h}{1,6}(\r\n|[ \t\r\n\f])?
h          [0-9a-f]

Это можно перевести в регулярное выражение Java следующим образом ( Я только добавил круглые скобки к частям, содержащим ИЛИ, и избегал обратной косой черты):

String h = "[0-9a-f]";
String unicode = "\\\\{h}{1,6}(\\r\\n|[ \\t\\r\\n\\f])?".replace("{h}", h);
String escape = "({unicode}|\\\\[^\\r\\n\\f0-9a-f])".replace("{unicode}", unicode);
String nonascii = "[\\240-\\377]";
String nmchar = "([_a-z0-9-]|{nonascii}|{escape})".replace("{nonascii}", nonascii).replace("{escape}", escape);
String nmstart = "([_a-z]|{nonascii}|{escape})".replace("{nonascii}", nonascii).replace("{escape}", escape);
String ident = "-?{nmstart}{nmchar}*".replace("{nmstart}", nmstart).replace("{nmchar}", nmchar);

System.out.println(ident); // The full regex.

Обновление 2 : о, вы больше PHP'er, ну, я думаю, вы можете понять, как / где делать str_replace ?

46
ответ дан 27 November 2019 в 23:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: