JavaScript: экранирование RegEx в строковых литералах, для использования в match () / search () [duplicate]

Я работаю в компании, проводящей исследования рынка, и мы должны фильтровать эти типы ввода в любое время. Вы слишком усложняете это. Просто разделите не-буквенно-цифровые символы и посмотрите, есть ли расширение.

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

26
задан Eric Leschinski 20 March 2015 в 16:30
поделиться

6 ответов

Обратная косая черта (\) является escape-символом в Javascript (наряду с множеством других C-подобных языков). Это означает, что когда Javascript встречает обратную косую черту, он пытается избежать следующего символа. Например, \n является символом новой строки (а не обратным слэшем, за которым следует буква n).

Чтобы вывести литеральный обратный слэш, вам нужно вывести его . Это означает, что \\ выведет одиночную обратную косую черту (и \\\\ выведет два и т. Д.). Причина "aa ///\" не работает, потому что обратная косая черта сбегает из " (которая будет печатать литеральную цитату), и поэтому ваша строка не будет правильно завершена. Аналогично, "aa ///\\\" не будет работать, потому что последняя обратная косая черта снова ускользает от цитаты.

Просто помните, что для каждой обратной косой черты, которую вы хотите вывести, вам нужно дать Javascript two .

65
ответ дан Daniel Vandersluis 20 August 2018 в 18:25
поделиться
  • 1
    Я думаю, вы смутили // с \\‍. – Gumbo 11 October 2010 в 06:20
  • 2
    Ой, вот что происходит, когда я пишу ответы в 1:15 утра;) Исправлено. – Daniel Vandersluis 11 October 2010 в 06:20
  • 3
    Отличное объяснение. Я даю 1 голос за это. Но я не принял это, потому что я не получил ответа. Вход находится в руке пользователя, и если пользователь пытается ввести такую ​​последовательность, то можно ли это преодолеть. – Imrul 11 October 2010 в 09:23

Если вы хотите использовать специальный символ в значении javascript, требуется Escape Character (\).

Обратная косая черта в вашем примере это специальный символ.

Итак, вы должны сделать что-то подобное:

var ttt = "aa ///\\\\\\"; // --> ///\\\

или

var ttt = "aa ///\\"; // --> ///\

Но Escape Character не требуется для ввода пользователем.

Когда вы нажимаете / в поле подсказки или в поле ввода, тогда подайте, это означает, что один /.

0
ответ дан diewland 20 August 2018 в 18:25
поделиться

Возможно, вы захотите попробовать следующее, что является более или менее стандартным способом выхода из пользовательского ввода:

function stringEscape(s) {
    return s ? s.replace(/\\/g,'\\\\').replace(/\n/g,'\\n').replace(/\t/g,'\\t').replace(/\v/g,'\\v').replace(/'/g,"\\'").replace(/"/g,'\\"').replace(/[\x00-\x1F\x80-\x9F]/g,hex) : s;
    function hex(c) { var v = '0'+c.charCodeAt(0).toString(16); return '\\x'+v.substr(v.length-2); }
}

Это заменяет все обратные косые черты экранированным обратным слэшем, а затем переходит к другому, -печатаемые символы в их экранированную форму. Он также избегает одиночных и двойных кавычек, поэтому вы можете использовать вывод как конструктор строк даже в eval (что само по себе плохо, учитывая, что вы используете пользовательский ввод). Но в любом случае он должен выполнять нужную работу.

6
ответ дан Eric Leschinski 20 August 2018 в 18:25
поделиться
  • 1
    & lt; script type = "text / javascript" & gt; & gt; & gt; & gt; var ttt = stringEscape (& quot; aa /// \\\ & quot;); & Lt; / сценарий & GT; Запустите это после добавления функции в HTML HEAD. Вы увидите разницу. – Imrul 11 October 2010 в 09:14
  • 2
    @Imrul, не уверен, что я понимаю. Написание сценария с использованием "aa /// \\\ & quot; это не то же самое, что получение «aa /// \\\ & quot; как вход от пользователя. В первом случае тройная обратная косая черта и двойные кавычки, следующие за ними, интерпретируются как одна обратная косая черта, сопровождаемая двойными кавычками. В более позднем случае ввод интерпретируется дословно и содержит три обратной косой черты. Функция stringEscape () преобразует пользовательский ввод в строковый литерал в форме скрипта. Я думал, что это то, чего вы пытались достичь, нет? – Roy Sharon 11 October 2010 в 09:59

Ссылка jsfiddle на то, где я опробовал ваш запрос http://jsfiddle.net/A8Dnv/1/ , его рабочий тон @Imrul, как упоминалось, вы используете C # на стороне сервера, и вы не возражаете либо: http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.escape.aspx

0
ответ дан jknair 20 August 2018 в 18:25
поделиться
  • 1
    HTML - это не JavaScript. – Gumbo 11 October 2010 в 06:18
  • 2
    @gumbo и ваша точка? btw imrul указано "да, это в пользовательском вводе из ввода HTML, поданного в браузере & quot; было бы полезно, если бы вы могли подробно объяснить – jknair 11 October 2010 в 06:32

Вы должны избегать каждого \, чтобы быть \\:

var ttt = "aa ///\\\\\\";

Обновлено : Я думаю, что этот вопрос не касается escape-символа в строка вообще. Ответчик, кажется, не объясняет проблему правильно.

, потому что вам нужно было показать пользователю сообщение, что пользователь не может указать имя, имеющее символ (\).

Я думаю, что сценарий похож на:

var user_input_name = document.getElementById('the_name').value;

. Затем искатель хочет проверить, содержит ли user_input_name любое [\]. Если это так, то предупредите пользователя.

Если пользователь вводит [aa ///\] в поле ввода HTML, то если вы alert(user_input_name), вы увидите [aaa ///\]. Вам не нужно бежать, т. Е. Заменить [\] на [\\] в JavaScript-коде. Когда вы выполняете экранирование, это происходит потому, что вы пытаетесь создать строку, содержащую специальные символы в исходном коде JavaScript . Если вы этого не сделаете, он не будет корректным. Поскольку вы уже получаете строку, вам не нужно передавать ее в функцию экранирования. Если вы это сделаете, я предполагаю, что вы генерируете другой код JavaScript из кода JavaScript, но здесь это не так.

Я угадываю, что искатель хочет имитировать вход, поэтому мы можем понять проблему. К сожалению, искатель не очень хорошо разбирается в JavaScript. Таким образом, нам предоставляется код синтаксической ошибки:

var ttt = "aa ///\";

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

Если вы хотите имитировать, код должен быть действительным на первом месте.

var ttt = "aa ///\\"; // <- This is correct
// var ttt = "aa ///\"; // <- This is not.

alert(ttt); // You will see [aa ///\] in dialog, which is what you expect, right?

Теперь вам нужно только

var user_input_name = document.getElementById('the_name').value;
if (user_input_name.indexOf("\\") >= 0) { // There is a [\] in the string
  alert("\\ is not allowed to be used!"); // User reads [\ is not allowed to be used]
  do_something_else();
  }

Изменить: я использовал [] для цитирования текста, который будет показан, так что это будет менее запутанным, чем использование "".

4
ответ дан livibetter 20 August 2018 в 18:25
поделиться
  • 1
    см. ссылки javascript.about.com/library/bladdslash.htm & amp; navioo.com/javascript/tutorials/Javascript_addslashes_1558.html они сделали то же самое, но если я использую var t = addslashes (& quot; aa /// \\\ & quot;), то я получил ошибку !! – Imrul 11 October 2010 в 05:40
  • 2
    Вы кодируете PHP на стороне сервера? Потому что var t не похоже на объявление переменной PHP. – livibetter 11 October 2010 в 05:47
  • 3
    Я использую javascript для решения этой проблемы. Я попытался использовать escape (string) и unescape (string). Но они не работали ни – Imrul 11 October 2010 в 05:59
  • 4
    Затем мой ответ уже сказал вам, как сбежать \nри вводе строки в JS-коде. escape() не для этой цели. – livibetter 11 October 2010 в 06:07
  • 5
    Я получил ответ. Но это не то, чего я хочу. если ваш ввод является динамическим, тогда как вы можете добавить дополнительную косую черту в свою строку. U нужна функция для этого. Я использовал некоторую функцию, как я упоминал ранее, но у меня не было того, чего я хочу. – Imrul 11 October 2010 в 09:18

Обратная косая черта \ зарезервирована для использования в качестве escape-символа в Javascript.

Чтобы использовать обратную косую черту буквально, вам нужно использовать две обратные косые черты

\\
2
ответ дан Talal Nabulsi 20 August 2018 в 18:25
поделиться
Другие вопросы по тегам:

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