Какие символы допустимы для имен переменных JavaScript?

Какие символы можно использовать для именования переменной JavaScript?

Хочу создать маленькуюбиблиотека расширений " для моих не-JavaScript пользователей здесь на работе (которые все кажутся брезгливыми, когда дело доходит до языка). Мне нравится, как jQuery и Prototype используют оба$ знак доллара, и так как я использую jQuery, яищу еще один хороший односимвольный символ для использования.

Я понимаю, что могу просто проверить несколько персонажей, но яЯ надеюсь начать с моего списка персонажей (возможно, с учетом будущей интеграции с другой популярной библиотекой).

 Aidan Lovelace08 янв. 2019 г., 14:16
@JulesManson Нет, потому что символ фунта зарезервирован для других целей.
 Jules Manson26 окт. 2018 г., 12:04
F # является допустимым именем переменной? Я строю небольшую функциональную библиотеку JavaScript и хочу использовать F # для имени модуля. Типичный вызов функции будет выглядеть следующим образом: F # .partial (fn, ... presetArgs);
 nalply01 авг. 2011 г., 13:27
NO. Юникод буквы допустимы. Попробуйте π, например.
 Gary S. Weaver10 мая 2013 г., 21:01
Хотя в именах переменных допустимы буквы Юникод, использование Юникода в коде может бытьпроблематичный, Я бы предложил не использовать их в именах переменных, если вы можете обойтись без них.

Ответы на вопрос(14)

вы можете просто исключить персонажей, которых вы нене хочу использовать.

export const validateUserName = name => {
  const re = /[\[email protected]#$%^&*()_|=?;:",.<>{}\]\\/]/gi;
  return Boolean(name && !re.test(name);
};

https://regex101.com/r/xPYcyL/1/

что идентификатор может начинаться с символа $, знака подчеркивания или UnicodeLetter, а затем он (чуть ниже) указывает, что UnicodeLetter может быть любым символом из категорий Unicode, Lo, Ll , Lu, Lt, Lm и Nl. И когда вы посмотрите на эти категории, вы увидите, что это открывает гораздо больше возможностей, чем просто латинские буквы. Просто ищитеЮникод категории в гугле и их можно найти.

 Calmarius20 дек. 2011 г., 10:59
Ошибки подключения и 404 'все, что я получаю за каждый соответствующий результат, когда гуглюЮникод категории) ... :(

неРазве лучше просто попросить браузер решить, используя?eval

function isValidVarName( name ) {
    try {
        // Update, previoulsy it was
        // eval('(function() { var ' + name + '; })()');
        Function('var ' + name);
    } catch( e ) {
        return false;
    }
    return true;
}

isValidVarName('my_var');     // true
isValidVarName('1');          // false
 royhowie21 июл. 2014 г., 05:19
@ 1j01 Как насчет заменыname с(typeof name === "string")? name.replace(/\(|\)/,"") : "_noXSS" )? Если это строка, это 'Я заменю круглые скобки (определенно не допускается в переменных), поэтому я думаю, что выполнить что-либо было бы почти невозможно.
 Anas Nakawa13 февр. 2014 г., 13:21
name.split('=')[0], решу это.
 Toothbrush21 февр. 2014 г., 19:10
Это'довольно умная идея, несмотря на уязвимость атаки XSS.
 1j0114 февр. 2014 г., 03:14
xss;alert("try again");
 1j0113 февр. 2014 г., 08:15
Нет, это нет.xss = alert("I'm in your vars executin mah scrip's");;;;; например нетДопустимое имя переменной JavaScript.
 cleong25 июл. 2015 г., 12:27
@ 1j01, посмотри мой ответ.
 1j0121 июл. 2014 г., 07:03
Ну тогдаisValidVarName('aler(t') становится правдой. А такжеisValidVarName('_;;;') остается верным. Но вы могли бы проверить в начале, если это соответствует что-то вроде/[;,\(\)]/ но тогда вы все еще можете выполнить_=location="#!?" так что вы добавляете= в список, но вы все еще можете выполнить'_\ndelete foo' (который проходит тест как допустимое имя переменной), поэтому вы должны исключить\nс и\rs и может быть какой-нибудь юникод newline? Но `Ну тогдаisValidVarName('aler(t') становится правдой. А такжеisValidVarName('_;;;') остается верным. Но вы могли бы проверить в начале, если это соответствует что-то вроде/[;,\(\)]/ но тогда вы все еще можете выполнить_=location="#!?" так что вы добавляете= в список, но вы все еще можете выполнить'_\ndelete foo' (который проходит тест как допустимое имя переменной), поэтому вы должны исключить\nс и\r isn 'допустимый идентификатор, поэтому вы должны исключить все пробелы ...проигрышная битва Я думаю что'насколько я могу пойти против себяif(/[;,\(\)=\s]/.exec(name))return!1

Из спецификации ECMAScript в разделе7.6 Имена идентификаторов и идентификаторыдействительный идентификатор определяется как:

Identifier :: 
    IdentifierName but not ReservedWord

IdentifierName :: 
    IdentifierStart 
    IdentifierName IdentifierPart 

IdentifierStart :: 
    UnicodeLetter 
    $ 
    _ 
    \ UnicodeEscapeSequence 

IdentifierPart :: 
    IdentifierStart 
    UnicodeCombiningMark 
    UnicodeDigit 
    UnicodeConnectorPunctuation 
    \ UnicodeEscapeSequence 

UnicodeLetter 
    any character in the Unicode categories “Uppercase letter (Lu)”, “Lowercase letter (Ll)”, “Titlecase letter (Lt)”, 
    “Modifier letter (Lm)”, “Other letter (Lo)”, or “Letter number (Nl)”. 

UnicodeCombiningMark 
    any character in the Unicode categories “Non-spacing mark (Mn)” or “Combining spacing mark (Mc)” 

UnicodeDigit 
    any character in the Unicode category “Decimal number (Nd)” 

UnicodeConnectorPunctuation 
    any character in the Unicode category “Connector punctuation (Pc)” 

UnicodeEscapeSequence 
    see 7.8.4. 

HexDigit :: one of 
    0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F

что создает много возможностей для именования переменных, а также для игры в гольф. Позволять'Попробуйте несколько примеров.

Допустимый идентификатор может начинаться сUnicodeLetter$_, или же\ UnicodeEscapeSequence, Буква Unicode - это любой символ из этих категорий (смотреть все категории):

Прописная буква (Лу)Строчная буква (Ll)Заглавная буква (Лт)Буква модификатора (Лм)Другое письмо (Ло)Буквенный номер (Nl)

Это одно объясняет некоторые безумные возможности -рабочие примеры, Если это не такне работать во всех браузерах, а затем назвать это ошибкой, потому что это должно.

var ᾩ = "something";
var ĦĔĽĻŎ = "hello";
var 〱〱〱〱 = "less than? wtf";
var जावास्क्रिप्ट = "javascript"; // ok that's JavaScript in hindi
var KingGeorgeⅦ = "Roman numerals, awesome!";
 Anurag30 окт. 2014 г., 21:32
 Walter Tross30 окт. 2014 г., 14:45
Не могли бы вы скопировать пример строки вэто кодовая страница Rosetta, которой в настоящее время не хватает примера JavaScript?

Принятый ответ исключил бы множество допустимых идентификаторов, насколько я вижу. Вот регулярное выражение, которое я собрал, которое должно следоватьспецификация (см. главу 7.6 об идентификаторах). Создал его с помощью RegexBuddy, и вы можете найти экспорт объяснения наhttp://samples.geekality.net/js-identifiers.

Кроме того, имя не может быть одним из следующих зарезервированных слов.

break, do, instanceof, typeof, case, else, new, var, catch, finally, return, void, continue, for, switch, while, отладчик, function, this, по умолчанию, if, throw, delete, in, try, class, enum, extends, super, const, экспорт, импорт, реализует, let, private, public, yield, интерфейс, пакет, защищенный, статический, ноль, true, false

 Mathias Bynens07 мар. 2012 г., 18:20
@Svish Ну да, выписывая диапазоны самостоятельно, как я сделал :) Обратите внимание, что ваше регулярное выражение также нет приходится,,,evalargumentsNaNInfinity а такжеundefined крайние случаи.
 Svish02 февр. 2012 г., 09:46
Нет яЯ почти уверен, что имел в виду то, что написал :) Вопрос, как я понял, просто задал вопрос о том, что является допустимым именем функции javascript, а не о том, как регулярное выражение для этого будет в конкретном javascript. Я сделал это в RegexBuddy и яЯ использую его в PHP на странице примера, на которую я ссылаюсь. Отлично работает, иtest также принимается.
 Mathias Bynens18 февр. 2012 г., 02:48
@DavidMurdoch I ’мы написали JavaScript-совместимое регулярное выражение длиной 11,335 символов, которое можно использовать для проверки идентификаторов (или имен переменных). Увидетьмой ответ.
 Svish18 февр. 2012 г., 14:56
@MathiasBynens А, понятно :) Я тоже сделал один, но вместо этого использовал PHP для проверки, которая поддерживает Unicode:samples.geekality.net/js-identifiers
 Svish08 мар. 2012 г., 12:10
@MathiasBynens Если вы 'Вы говорите о своих регулярных выражениях длиной в 11.000 символов, я думаю, чтоДля простоты оставим это так: p Зависит от использования, если это нормально с несколькими ложными срабатываниями или нет, конечно.
 Svish02 февр. 2012 г., 09:50
Что касается того, почему тыRegexBuddy сообщает, что когда он не работает в Javascript, он пытается превратить его в код js: "Ваше регулярное выражение не может быть преобразовано в вкус, требуемый этим языком. JavaScript не поддерживает свойства Unicode, сценарии, блоки или квантификаторы собственников. Из-за этого приведенный ниже фрагмент кода не будет работать так, как вы задумывали.  if (/^[$_\p{L}][$_\p{L}\p{Mn}\p{Mc}\p{Nd}\p{Pc}\u200C\u200D]*$/.test(subject)) { // Successful match } else { // Match attempt failed }
 David Murdoch02 февр. 2012 г., 03:11
Это регулярное выражение не является допустимым регулярным выражением JS. Я думаю, что вы имели в виду:^[$_\p{L}][$_\p{L}\p{Mn}\p{Mc}\p{Nd}\p{Pc}\u200C\u200D]*$, Теперь даже с поправкой могуКажется, что это регулярное выражение действительно работает."test".match(/^[\p{L}\p{Nl}$_][\p{L}\p{Nl}$\p{Mn}\p{Mc}\p{Nd}\p{Pc}]*$/) === null даже если "тестовое задание" является допустимым именем переменной JS
 Svish18 февр. 2012 г., 12:55
@MathiasBynens: Тогда я думаю, что просто сделал бы это на другом языке, хе-хе. Я нахожу свое решение довольно кратким, и оно должно быть точным. В любом случае яЯ не совсем уверен, почему вам нужно проверить, является ли идентификатор допустимым Javascript в Javascript. Если это не такт, твой сценарий просто нет работа. Я считаю это более полезным, например, на стороне сервера, чтобы проверить, является ли имя функции обратного вызова JSONP допустимым.
 Mathias Bynens18 февр. 2012 г., 14:41
@Svish: О, я просто написал это регулярное выражение для удовольствия, и дляинструмент проверки имени переменной JavaScript, который я сделал, Это'Интересно посмотреть, является ли данная строка действительным идентификатором в соответствии со спецификацией, и вы можетедля этого не стоит использовать браузеры, потому что ни один из них, похоже, не полностью реализует спецификацию в этом отношении. Я определенно согласен с тем, что JavaScript не лучший язык для написания регулярных выражений, подобных этим.
 Svish18 февр. 2012 г., 14:55
@ pimvdb Нет. Нет, я нет;)
 Svish07 мар. 2012 г., 17:27
@MathiasBynens Исправимо?
 pimvdb18 февр. 2012 г., 13:38
@Svish: Дон 'Вы используете JavaScript на стороне сервера? :)
 Mathias Bynens07 мар. 2012 г., 13:24
@Svish Следует отметить, что у вашего регулярного выражения есть некоторые ложные срабатывания.Дополнительные символы Юникода (например.Идеограмма совместимости U + 2F800 CJK, которые перечислены в категории [Lo])запрещено в именах идентификаторовтак как JavaScript интерпретирует их как две отдельные суррогатные половины (например,\uD87E\uDC00) которые нене соответствует ни одной из разрешенных категорий Юникода. Ваше регулярное выражение, однако, позволило бы такого персонажа.

рабочее место сбоя который перебирает все кодовые точки и испускает символ, еслиeval('var ' + String.fromCodePoint(#) + ' = 1') работает.

Он просто продолжает идти и идти, и идти ....

цифры, знаки доллара ($) и подчеркивания (_). Они могут'начать с цифр.

Обычно библиотеки используют$ а также_ в качестве ярлыков для функций, которые выбуду использовать везде. Хотя имена$ или же_ Арен»не имеют смысла, ониполезно для их краткости и так как выЯ буду использовать функцию везде, где выОжидается, что они знают, что они имеют в виду.

Если ваша библиотека нея заключаюсь в том, чтобы получить всю функцию,Я рекомендую вам использовать более значимые имена, так как они помогут вам и другим понять, что делает ваш код, не ставя под угрозу исходный код.любезность.

Вы могли бы, например, взглянуть на удивительныйDateJS библиотека и на синтетическом сахаре это позволяет без необходимости каких-либоусловное обозначение или жекороткое имя переменные.

Сначала вы должны сделать свой код практичным, и только после того, как попытаетесь сделать его красивым.

^[a-zA-Z_$][0-9a-zA-Z_$]*$

По-английски: Он должен начинаться со знака доллара, подчеркивания или одной из букв алфавита, состоящего из 26 символов, в верхнем или нижнем регистре. Последующие символы (если есть) могут быть одним из них или десятичной цифрой.

JavaScript 1.5 и более поздние версии *:^[\p{L}\p{Nl}$_][\p{L}\p{Nl}$\p{Mn}\p{Mc}\p{Nd}\p{Pc}]*$

Это сложнее выразить на английском языке, но концептуально это похоже на более старый синтаксис с добавлением, что буквы и цифры могут быть из любого языка. После первого символа также допускаются дополнительные символы подчеркивания (вместе именуемые «разъемы») и дополнительные знаки объединения символов («модификаторы»). (Другие символы валюты не включены в этот расширенный набор.)

JavaScript 1.5 и более поздние версии также допускают escape-последовательности Unicode,при условии, что результатом является символ, который будет разрешен в приведенном выше регулярном выражении.

Идентификаторы также не должны быть текущим зарезервированным словом или словом, которое рассматривается для будущего использования.

Нет практического ограничения на длину идентификатора. (Браузеры различаются, но выу вас будет 1000 символов и, возможно, на несколько порядков больше.)

Ссылки на категории персонажей:

Буквы:Лу,Ll,Lt,Lm,Lo,Nl

(объединено в регулярном выражении выше как «L»)Объединение отметок («модификаторы»):Mn,McЦифры:NdРазъемы:ПК*

нотабене Это регулярное выражение Perl предназначено только для описания синтаксиса - это выигралоне работает в JavaScript, который неt (пока) включает поддержку свойств Unicode. (Есть некоторые сторонние пакеты, которые утверждают, что добавляют такую поддержку.)

 David Murdoch02 февр. 2012 г., 03:08
Я могу'Кажется, что это регулярное выражение действительно работает."test".match(/^[\p{L}\p{Nl}$_][\p{L}\p{Nl}$\p{Mn}\p{Mc}\p{Nd}\p{Pc}]*$/) === null даже если "тестовое задание" является допустимым именем переменной JS
 danorton03 февр. 2012 г., 01:53
Извините, но JavaScript нене поддерживает это регулярное выражение. Я добавил примечание, чтобы уточнить.
 Semicolon12 апр. 2015 г., 23:57
ES6 формально определяет допустимые идентификаторы, используя классы символов, специально предназначенные для этой цели (используйте при программировании) - не уверен, если это было верно ранее - то есть вы можете сделать это регулярное выражение немного более читабельным, если не принимать во внимание зарезервированные слова - или по крайней мере, было бы, если быt для факта, что escape-последовательности Unicode теперь также допустимы в идентификаторах! Это точно в соответствии со спецификацией ES6: (?: [\ P {ID_Start} \ $ _] | \\ u (?: [\ DA-Fa-f] {4} | \ {[\ dA-Fa-f ] + \})) ([\ р {ID_Continue} \ $ _ \ u200C \ u200D] | \\ и (?: [\ дА-Fa-е] {4} | \ {[\ дА-Fa-е] + \})) *
 Mathias Bynens12 мар. 2012 г., 10:20
Следует отметить, что у вашего второго регулярного выражения есть некоторые ложные срабатывания.Дополнительные символы Юникода (например.Идеограмма совместимости U + 2F800 CJK, которые перечислены в категории [Lo])запрещено в именах идентификаторовтак как JavaScript интерпретирует их как две отдельные суррогатные половины (например,\uD87E\uDC00) которые нене соответствует ни одной из разрешенных категорий Юникода. Ваше регулярное выражение, однако, позволило бы такого персонажа. Кроме того, U + 200C и U + 200D отсутствуют.

нет никаких причин фактически запускать объявленную функцию. Мы хотим знать, правильно ли он анализирует, а не работает ли код. Во-вторых, буквальный объект - лучший контекст для нашей цели, чемvar XXX как это'Сложнее вырваться.

    function isValidVarName( name ) {
    try {
        return name.indexOf('}') === -1 && eval('(function() { a = {' + name + ':1}; a.' + name + '; var ' + name + '; }); true');
    } catch( e ) {
        return false;
    }
    return true;
}

// so we can see the test code
var _eval = eval;
window.eval = function(s) {
    console.log(s);
    return _eval(s);
}

console.log(isValidVarName('name'));
console.log(isValidVarName('$name'));
console.log(isValidVarName('not a name'));
console.log(isValidVarName('a:2,b'));
console.log(isValidVarName('"a string"'));

console.log(isValidVarName('xss = alert("I\'m in your vars executin mah scrip\'s");;;;;'));
console.log(isValidVarName('_;;;'));
console.log(isValidVarName('_=location="#!?"'));

console.log(isValidVarName('ᾩ'));
console.log(isValidVarName('ĦĔĽĻŎ'));
console.log(isValidVarName('〱〱〱〱'));
console.log(isValidVarName('जावास्क्रिप्ट'));
console.log(isValidVarName('KingGeorgeⅦ'));
console.log(isValidVarName('}; }); alert("I\'m in your vars executin\' mah scripts"); true; // yeah, super valid'));
console.log(isValidVarName('if'));
 1j0126 июл. 2015 г., 22:36
Дон»даже не пытайся.isValidVarName('}; }); alert("I\'m in your vars executin\' mah scripts"); true; // yeah, super valid');
 cleong28 июл. 2015 г., 00:09
@ 1j01, ах, забыл про комментарий к коду. Я надеялся, что несбалансированность скобок может помешать запуску кода. Простая проверка для} следует исключить это.
 1j0128 июл. 2015 г., 17:26
isValidVarName("delete") === true

http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf

Там's раздел на странице 15, который определяет, какой может быть синтаксис идентификатора.

 Timwi05 июл. 2012 г., 21:57
@RLH: Как мило с вашей стороны думать, что весь остальной мир печатает весь неанглоязычный текст, постоянно используя Alt-коды :)
 nalply01 авг. 2011 г., 13:25
@ Ричард Клейтон. Нет. Вы можете использовать ä или π.
 RLH05 июл. 2012 г., 22:37
@timwi: Да, но рассмотрим обратное. У вас может быть специальная клавиатура (не требуется Alt +), но следующий пользователь, который использует вашу платформу или API, может не иметь ее, и, следовательно, для создания того же символа потребуется использовать сочетания клавиш. ;)
 RLH03 авг. 2011 г., 22:24
Технически можно использовать любойUnicodeletter», Письма, как ä или π допустимы, потому что они являются частью набора символов Юникода и технически не являются символами типа $, & или же @. Я бы порекомендовал избегать всех таких символов, потому что большинству из нас, кто не использует расширенную кодировку, будет трудно вспомнить, какие клавиши Alt + нажимать, чтобы получить соответствующий символ.
 Cypher24 окт. 2013 г., 00:31
@ Тимви, потому что копировать & программирование пасты так предпочтительнее. Если какая-либо библиотека заставляет меня использовать символ Юникода для вызова функции, единственный ключ, который яЯ собираюсь нажать на УДАЛИТЬ.
 Beejor03 июл. 2015 г., 08:46
Потому что нажатие Alt-P для π намного сложнее, чем Shift-4 за $. ;-)
 Richard Clayton02 нояб. 2009 г., 14:15
Спасибо. Я нашел информацию в статье. Очевидно, вы можете использовать только $ или _. Ричард
 Timwi09 июл. 2012 г., 23:13
@RLH: во-первых, вы всегда можете использовать вставить. Во-вторых, вы всегда можете набрать любой язык в Windows Windows, просто установив одну из раскладок клавиатуры.предоставляется с Windows, (Если вы посчитаете это нелепым, рассмотрите обратное: пользователи с нелатинскими сценариями должны переключатьсяих раскладки клавиатуры для размещенияваш Латинские буквы.) В-третьих, вы можете создать собственную раскладку клавиатуры с помощью MSKLC или использовать такой инструмент, как AutoHotkey. Наконец, в правильно сконструированном языке программирования (т.е. не в JS) IntelliSense или любая другая форма автозаполнения исправляет все это.
Решение Вопроса

Допустимые имена переменных JavaScriptМоя рецензия обобщает соответствующие разделы спецификации:

Идентификатор должен начинаться с$_или любой символ в категориях Unicode «Прописная буква (Lu) »,«Строчная буква (Ll) »,«Заглавная буква (Lt) »,«Буква модификатора (Lm) »,«Другое письмо (Lo), или же "Буквенный номер (Nl) ».

Остальная часть строки может содержать те же символы, а также любыеU + 200C нулевой ширины не столярные персонажи,U + 200D столяр нулевой ширины символы и символы в категориях UnicodeЗнак без пробелов (Mn) »,«Метка объединения интервалов (Mc) »,«Десятичное число (Nd) », или же "Знаки препинания (Pc) ». I’

мы также создалиинструмент это скажет вам, является ли любая введенная вами строка действительным именем переменной JavaScript в соответствии с ECMAScript 5.1 и Unicode 6.1:

Постскриптум Чтобы дать вам представление о том, как неправильно Энтони Миллс Ответ таков: если бы вы суммировали все эти правила в одном регулярном выражении только для ASCII для JavaScript,это будет 11 236 символов в длину, Вот:

// ES5.1 / Unicode 6.1
/^(?!(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$)[$A-Z\_a-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc][$A-Z\_a-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc0-9\u0300-\u036f\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e4-\u08fe\u0900-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c01-\u0c03\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c82\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d02\u0d03\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19b0-\u19c0\u19c8\u19c9\u19d0-\u19d9\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf2-\u1cf4\u1dc0-\u1de6\u1dfc-\u1dff\u200c\u200d\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua880\ua881\ua8b4-\ua8c4\ua8d0-\ua8d9\ua8e0-\ua8f1\ua900-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f]*$/
 sebpiq27 мар. 2012 г., 18:13
Привет Матиас! Отличный инструмент! Тем не менее, ваше объяснение говорит "символы в категориях Unicode ... (Mn) " разрешены. Так почему же это говоритa~ не является действительным !? Я что-то пропустил ?
 Jack Giffin19 авг. 2018 г., 20:02
Если вас больше беспокоит размер файла, а не скорость регулярного выражения, то я создал уменьшенную (но более медленную) версию регулярного выражения выше. Мое регулярное выражение можно найтиздесь, на github.
 hippietrail28 янв. 2013 г., 01:43
Черт возьми, так что я могуумничать и использовать¢ дополнять$ ... Ну что ж ...)-:
 Ben11 июл. 2015 г., 11:25
Цитирую вопрос: «задаю этот вопрос ... для совета о том, какие символы (даже если они действительны) было бы плохой идеей для использования ", Энтони Миллс ответ лучше, чем ваш на этом основании ... Программисты должны использовать английский по той же причине, что и пилоты самолетов: они должны общаться на глобальном уровне. Это может быть не хорошо, но этоэто правда. Microsoft экспериментировала с переводом их API в Office (например,Application.ActiveDocument.Select будет на французском, немецком и т.д ... они неПродлить эксперимент, это была плохая идея.
 mch14 апр. 2015 г., 10:56
Это преобразование PHP 5.4:http://pastebin.com/6VqS0qvm
 Mathias Bynens19 мар. 2014 г., 23:33
@ n2liquid-GuilhermeVieira Только если вы предполагаете, что все движки JavaScript на 100% соответствуют спецификации, что не являетсят всегда так - это точно не былот, когда я сделал это исследование. В блоге, на который я ссылаюсь, упоминаются все ошибки браузера / движка, которые я отправил и исправил.
 Anurag23 мар. 2015 г., 03:53
@romkyns - спасибо :) .. Я подумал, что ваш комментарий был предназначен для другого ответа, и это был главный ответ за пару лет.
 Roman Starkov21 мар. 2015 г., 14:06
@ Анураг хорошо, удалил :) Тыверно, это больше не применяется, и к тому же я не былговорить о вашем ответе, этоs был мой upvote, так как на самом деле :)
 Mathias Bynens27 мар. 2012 г., 19:53
@sebpiq~ находится в категории Math Symbol [Sm], а не [Mn].
 Ben16 июл. 2015 г., 12:24
Просто указывая на это, как Энтони Миллс, выМы ответили только на половину вопроса (другая половина). Так что'дурной тоном критиковать его по имени за его ответ, когда ваш ответ тоже не полный.
 Richard Clayton20 февр. 2012 г., 05:12
Я дам вам кредит на количество времени, которое у вас ушло на его создание.
 Ben Taliadoros27 янв. 2016 г., 17:29
Мои мечты о создании UKquery £(селектор) были разбиты :(
 Mathias Bynens27 янв. 2019 г., 13:06
@ ЙоаoPimentelFerreira Да, это так.
 Mathias Bynens18 авг. 2013 г., 22:32
С помощьюрегенерироватьрегулярное выражение может быть оптимизировано до 9594 символов. Я'мы создалидемонстрационная страница, которая динамически создает регулярное выражение в чистом JavaScript.
 Anurag21 мар. 2015 г., 09:06
@romkyns - Хотя я могуне уверен, но у меня такое ощущение, что твой комментарий - "Когда вы проголосуете за этот ответ, пожалуйста, не забывайте понижать и неправильный ответ ниже. На момент написания, он получил более чем в два раза больше голосов, чем этот ответ ". меня опускают голоса :) .. Относительный порядок ответов по голосам изменился с момента вашего комментария, но это также зависит от пользователя.Критерии сортировки - Активные, Самые старые или Голоса.
 Mathias Bynens16 июл. 2015 г., 12:17
@Ben: две другие цитаты из вопроса: «Какие символы допустимы для имен переменных JavaScript? » а также "Кто-нибудь может указать мне на веб-страницу с подробным описанием символов, которые можно использовать для именования переменной JavaScript? »
 Guilherme Vieira18 мар. 2014 г., 16:36
Тот'довольно элегантно, но неfunction is_valid(id) { try { eval('function(){var ' + id + '}') } catch(err) { return false } return true } сделать работу? Честный вопрос.
 Mathias Bynens14 мая 2012 г., 18:24
@marsbear Я тоже написал статью об этом:mathiasbynens.be/notes/javascript-properties И инструмент тоже:mothereff.in/js-properties#12e34 Вотсоответствующий ответ переполнения стека мой.
 shanks15 нояб. 2018 г., 14:16
Я пришел сюда, задаваясь вопросом, какие странные символы я мог бы использовать условно, чтобы назвать свои обещания, затем я начал читать ответ, не прокручивая вниз, чтобы на самом деле увидеть, кто ответил, и когда я добрался до "Я написал инструмент часть моей кишки кричала, это должно быть, Матиас отвечает
 Olivier Dulac25 апр. 2013 г., 14:18
Это'Это правда (и отличный ответ). Однако это неПравильно: обфусцировать код, используя буквы, похожие на похожие, но на самом деле разные (или используя буквы, которые нельзя использовать в среде, не поддерживающей юникод), неправильно, imo. Это победилоt помогает кодированию, и может вместо этого создавать многочисленные ошибки. Единственный хороший плюс: это заставит людей (болезненно) осознавать такую возможность того, что какой-то код использует Unicode (и до боли знает о Unicode и его различных представлениях) ... О unicode:joelonsoftware.com/articles/Unicode.html
 João Pimentel Ferreira24 янв. 2019 г., 21:13
это также относится к именам функций?
 sebpiq28 мар. 2012 г., 18:00
@MathiasBynens: когда я нажимаю на ссылку [Mn], это один из первых символов!
 cdhowie02 февр. 2016 г., 21:23
@ n2liquid-GuilhermeVieira Этот подход также неправильно сообщает, чтоx,y является допустимым именем переменной во всех соответствующих реализациях JavaScript. То же самое сx; сопровождаемый любым действительным утверждением JavaScript.
 Mathias Bynens28 мар. 2012 г., 18:16
@sebpiq Тысмешивая тильду объединения (U + 0303), которая действительно относится к категории [Mn], с тильдой (U + 007E). Oни'не те же персонажи. является действительным идентификатором, ноa~ ISN»т, и инструмент сообщает об этом правильно.

Переменные Javascript

Вы можете начать переменную с любой буквы,$, или же_ персонаж. Пока это неНачните с цифры, вы также можете включить цифры.

Начните:[a-z], $, _

содержать:[a-z], [0-9], $, _

JQuery

Ты можешь использовать_ для вашей библиотеки, чтобы она стояла рядом с jQuery. Тем не менее, есть конфигурация, которую вы можете установить, чтобы jQuery не использовал$, Вместо этого он будет использоватьjQuery, Для этого просто установите:

jQuery.noConflict();

Эта страница объясняет, как это сделать.

 Tim Down24 февр. 2011 г., 17:46
@Richard: нет, это не такт абсолютно правильно. Смотрите @Yuvalik и @Anurag 'с ответами.
 Tomasz Waszczyk06 авг. 2015 г., 09:41
@EndangeredMassa зачем использовать переменную "_название" ? почему не просто имя?
 Richard Clayton02 нояб. 2009 г., 14:14
Это абсолютно правильно, но я дал ответ Энтони, который ответил за 0,02123413124 миллисекунды раньше вас. Сожалею.
 Richard Clayton26 февр. 2011 г., 15:35
Если вы так думаете, проголосуйте. Два ответа, которые я дал, дали мне ответ в тот день.
 EndangeredMassa24 февр. 2011 г., 22:27
Правильно. Другие ответы более полны.

ите, чтобы переменная не конфликтовала при использовании в FireFox,не делайте использовать имя переменной_content» поскольку это имя переменной уже используется браузером. Я нашел это трудным путем, и мне пришлось поменять все места, где я использовал переменную "_content» в большом приложении JavaScript.

 DanBrianWhite21 февр. 2014 г., 21:50
Вот jsfiddle, который предупреждает, когда переменная_content» не является "не определено» и когда "_content» устанавливается FireFox, устанавливается равнымwindow.content» jsfiddle.net/R2qvt/3I»
 Toothbrush21 февр. 2014 г., 18:57
Можете ли вы доказать это с помощью некоторого исходного кода, который не работает? Это неПохоже, что-то делать в Firefox.

[a-zA-Z_$][0-9a-zA-Z_$]*, Другими словами, первый символ может быть буквой или _ или $, а другие символы могут быть буквами или _ или $ или цифрами.

Замечания: В то время как другие ответы указывали, что вы можете использовать символы Unicode в идентификаторах JavaScript, реальный вопрос был "Какие символы я должен использовать для имени библиотеки расширений, такой как jQuery? " Это ответ на этот вопрос. Вы можете использовать символы Unicode в идентификаторах, но нене делай этого. Кодировки все время испорчены. Держите ваши открытые идентификаторы в диапазоне 32-126 ASCII, где это 'я в безопасности.

 flying sheep11 мар. 2015 г., 12:57
Unicode @AnthonyMills просто достаточно велик, чтобы в нем были похожие символы, но даже ASCII имеет 5 («O0” а также "iL1”) из них рассказывает. и ваш ответ не «технически» неправильно, этоS не так. «технически» означает, что этонеправильно в некоторых действительных контекстах. а также "тебе это не нравится » ISN»действительный контекст
 Roman Starkov22 июн. 2012 г., 21:40
Что касается кодировок: пожалуйстаделать используйте не-ASCII символы, по крайней мере, в строковых литералах. Мы должны устранить все глупые программы, которые получают кодировки "облажался все время, Какое блаженство просто набратьConsole.WriteLine("привет") в C # идействительно ли это работает!
 Anthony Mills27 февр. 2012 г., 20:33
Ромкинс, я недумаюИмена идентификаторов символов Юникода » будет когда-либо включен вJavaScript: хорошие части "и поэтому я предпочитаю игнорировать их существование. Тем не менее, я добавил отказ от ответственности в свой ответ для вашей выгоды.
 Richard Clayton02 нояб. 2009 г., 14:14
м вручаю ответ Энтони. Я посмотрел стандарт ECMA, предоставленный Бенджом, и обнаружил, что вы можете использовать только _ или $. Спасибо всем за помощь, хотя яЯ опечален этим фактом!
 Anthony Mills08 апр. 2015 г., 01:40
@flyingsheep Вопрос не "Какие символы являются допустимыми символами для идентификаторов JavaScript? " Тот's название вопроса, и эточасть вопроса, но этоне полный вопрос. Вопрос в том, какие символы хорошо использовать в названии библиотечной функции, такой как jQuery.s? И ответ на это:^[a-zA-Z_$][0-9a-zA-Z_$]*$ Не технически, буквально, по заданным причинам.
 Anthony Mills02 нояб. 2009 г., 14:15
Чтобы далее ответить на ваш вопрос, другой символ будет подчеркивание, как вdocumentcloud.github.com/underscore ... или вы всегда можете использовать что-то вроде$rc ... :) Прототип, например, использует$$и библиотека Microsoft Ajax использует $ с короткими словами.
 Anthony Mills30 мар. 2016 г., 07:05
Ну, я имел в виду, чтобы это относилось ко всему, так что да, что-то вроде^[a-zA-Z_$][0-9a-zA-Z_$]*$ если ты'Вы делаете регулярное выражение проверки (вы забыли последнее$ :)).
 Anthony Mills13 мар. 2014 г., 18:42
Или happyQuery, использующий эмодзи ... q̊̆̓̍u̐͂e̷̜r̤̻̫ͅy̎ ("
 scunliffe13 мар. 2014 г., 01:47
Теперь я вижу это ... конкурирующая библиотека для jQuery под названиемFuzzyQuery который делает селекторы по xpath с базовым именем ෴ просто для удовольствия:෴("body/div/span#foo").huzzah(true); ;-)
 Kzqai09 авг. 2012 г., 15:51
@AnthonyMills Или, вы знаете, вы можете быть просто человеком, который пишет на языке, который нет ограничено ascii.
 dotnetCarpenter14 мая 2019 г., 12:07
Смотри, @Timwi, особенно когда тыпереписываете библиотеку (как говорит Ричард),любезно не принуждайте своих пользователей к альт-бла дерьму или копированиюсклеивание. @AnthonyMills That 'довольно обидное заявление. Как насчет всего пространства AltGr +, которое я должен сделать, чтобы сделать пометку на датской клавиатуре? Ваше утверждение имеет смысл только на английской клавиатуре. В других странах символы не ASCII - это всего лишь одна клавиша на клавиатуре.
 Roman Dvoskin29 мар. 2016 г., 22:56
@ Энтони Миллс: Я думаю, что ^ [a-zA-Z _ $] [0-9a-zA-Z _ $] * - это то, что вы имели в виду. В противном случае что-то вроде1А» позволено. Смотрите это JSFiddlejsfiddle.net/8muoc0er/1
 Anthony Mills08 апр. 2015 г., 01:47
Примечание: я изменил свой ответ, чтобы указать, что я отвечал на полный вопрос, а не на ту часть вопроса, которая была "Что такое допустимые символы идентификатора JS ".
 David Murdoch20 мая 2011 г., 16:04
Дон»не забудь π:twitter.com/mathias/status/71573155470245888 (Да, это работает:jsfiddle.net/musicisair/Wqx5k)
 Erik Reppen16 сент. 2011 г., 20:54
Я, вероятно, планирую убить со-разработчика, который использовал символы юникода в названиях своих ярлыков. / едва ироничная речь
 Anthony Mills09 авг. 2012 г., 16:21
@Tchalvak Для кода, который вы используете, это 'S, вероятно, хорошо, используя Ʒ как имя вашей основной библиотеки. (О, вы думали, что это был 3?на самом деле U + 01B7 латинская заглавная буква Ezh! Или это было З, Заглавная буква Ze?) Если высобираемся написать библиотеку, которая может быть использована другими людьми, но этоВероятно, лучше всего придерживаться ASCII.
 Olivier Dulac25 апр. 2013 г., 14:20
@AnthonyMills: +1, чтобы показать самый портативный (и в моих глазах, верно) ответ. Т.е.: не выходя за пределы ASCII 's [- ~] диапазон (+ вкладка + перевод строки)
 ElDoRado123907 февр. 2019 г., 03:49
Когда вы пишете библиотеку, почему бы не позволить пользователю изменять имена? Например, имея набор модифицирующих (хорошо документированных ...) команд, можно ввести в скрипт url (...library.php?prefix=boo&suffix=hoo&function_longFunctionName=sfn  ) и PHP скрипт для модификации библиотеки. Оставаясь в пределах разумного, конечно, возможность изменить имена переменныхвнутри функции это, вероятно, не лучшая идея.>
 Anthony Mills08 апр. 2015 г., 01:36
@ Плуто я нене знаю этого. Вы думаете, что знаете язык ... :)
 Pluto25 мар. 2015 г., 21:05
@AnthonyMills Я видел, что это упоминалось где-то давным-давно, но вы можете буквально экранировать имена переменных и ключевые слова с помощью символов только для ascii. И чтобы все запуталось, добавьте восьмеричные числа. Например,\u0076a\u0072 \u0417\u0417 = 043; console.log(ЗЗ == 35) // true
 Jacque Goupil12 февр. 2015 г., 16:08
.comment тела», q̊̆̓̍u̐͂e̷̜r̤̻̫ͅy̎ (".комментарий")); Хаха яЯ с удовольствием. Сожалею. Я думаю я'Я буду придерживаться простых акцентов, которые являются частью extendec ascii. EAAC и лайки.
 Anthony Mills08 июл. 2012 г., 23:57
Смотри, @Timwi, особенно когда тыпереписываете библиотеку (как говорит Ричард),любезно не принуждайте своих пользователей к альт-бла дерьму или копированиюсклеивание. Кроме того, для ваших собственных вещей, вы можете справиться с неприятностями, которые возникают, когда вы сталкиваетесь с ошибками браузера или прокси-сервера или чем-то еще, но заставлять пользователей вашей библиотеки справляться с этими вещами.круто Хороший ответ отвечаетчто я должен делать" больше, чем просто решение вопроса. Так что да, я хочу помочь людям. Я'Я не собираюсь включать бесполезную и опасную информацию, если я не скажу "о, и нене делай этого. "

Ваш ответ на вопрос