Я работаю в компании, проводящей исследования рынка, и мы должны фильтровать эти типы ввода в любое время. Вы слишком усложняете это. Просто разделите не-буквенно-цифровые символы и посмотрите, есть ли расширение.
Для дальнейшего анализа вы можете подписаться на одного из многих поставщиков, который предоставит вам доступ к базе данных действительных номеров, а также сообщит вам, если они стационарные или мобильные телефоны, отключены и т. д. Это стоит денег.
Обратная косая черта (\
) является escape-символом в Javascript (наряду с множеством других C-подобных языков). Это означает, что когда Javascript встречает обратную косую черту, он пытается избежать следующего символа. Например, \n
является символом новой строки (а не обратным слэшем, за которым следует буква n).
Чтобы вывести литеральный обратный слэш, вам нужно вывести его . Это означает, что \\
выведет одиночную обратную косую черту (и \\\\
выведет два и т. Д.). Причина "aa ///\"
не работает, потому что обратная косая черта сбегает из "
(которая будет печатать литеральную цитату), и поэтому ваша строка не будет правильно завершена. Аналогично, "aa ///\\\"
не будет работать, потому что последняя обратная косая черта снова ускользает от цитаты.
Просто помните, что для каждой обратной косой черты, которую вы хотите вывести, вам нужно дать Javascript two .
Если вы хотите использовать специальный символ в значении javascript, требуется Escape Character (\
).
Обратная косая черта в вашем примере это специальный символ.
Итак, вы должны сделать что-то подобное:
var ttt = "aa ///\\\\\\"; // --> ///\\\
или
var ttt = "aa ///\\"; // --> ///\
Но Escape Character не требуется для ввода пользователем.
Когда вы нажимаете /
в поле подсказки или в поле ввода, тогда подайте, это означает, что один /
.
Возможно, вы захотите попробовать следующее, что является более или менее стандартным способом выхода из пользовательского ввода:
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 (что само по себе плохо, учитывая, что вы используете пользовательский ввод). Но в любом случае он должен выполнять нужную работу.
Ссылка jsfiddle на то, где я опробовал ваш запрос http://jsfiddle.net/A8Dnv/1/ , его рабочий тон @Imrul, как упоминалось, вы используете C # на стороне сервера, и вы не возражаете либо: http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.escape.aspx
Вы должны избегать каждого \
, чтобы быть \\
:
var ttt = "aa ///\\\\\\";
Обновлено : Я думаю, что этот вопрос не касается escape-символа в строка вообще. Ответчик, кажется, не объясняет проблему правильно.
, потому что вам нужно было показать пользователю сообщение, что пользователь не может указать имя, имеющее символ (\).
blockquote>Я думаю, что сценарий похож на:
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(); }
Изменить: я использовал
[]
для цитирования текста, который будет показан, так что это будет менее запутанным, чем использование""
.
var t
не похоже на объявление переменной PHP.
– livibetter
11 October 2010 в 05:47
escape()
не для этой цели.
– livibetter
11 October 2010 в 06:07
Обратная косая черта \
зарезервирована для использования в качестве escape-символа в Javascript.
Чтобы использовать обратную косую черту буквально, вам нужно использовать две обратные косые черты
\\
//
с\\
. – Gumbo 11 October 2010 в 06:20