Ответ 1
Вы можете протестировать строку, используя это регулярное выражение:
function isValid(str){
return !/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g.test(str);
}
У меня есть код JavaScript, чтобы проверить, есть ли в строке специальные символы. Код отлично работает в Firefox, но не в Chrome. В Chrome, даже если строка не содержит специальных символов, она говорит, что она содержит специальные символы.
var iChars = "~'!#$%^&*+=-[]\\\';,/{}|\":<>?";
for (var i = 0; i < chkfile.value.length; i++)
{
if (iChars.indexOf(chkfile.value.charAt(i)) != -1)
{
alert ("File name has special characters ~'!#$%^&*+=-[]\\\';,/{}|\":<>? \nThese are not allowed\n");
return false;
}
}
Предположим, я хочу загрузить файл desktop.zip
с любого компьютера с Linux/Windows.
Значение chkfile.value
равно desktop.zip
в Firefox, но в Chrome значение chkfile.value
равно c://fakepath/desktop.zip
. Как мне избавиться от c://fakepath/
от chkfile.value
?
Вы можете протестировать строку, используя это регулярное выражение:
function isValid(str){
return !/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g.test(str);
}
Непосредственно из w3schools веб-сайт:
var str = "The best things in life are free";
var patt = new RegExp("e");
var res = patt.test(str);
Чтобы объединить свой пример с регулярным выражением, вы можете сделать следующее:
function checkUserName() {
var username = document.getElementsByName("username").value;
var pattern = new RegExp(/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/); //unacceptable chars
if (pattern.test(username)) {
alert("Please only use standard alphanumerics");
return false;
}
return true; //good user input
}
Вы пишете return true
где-нибудь? Вы должны были написать это, иначе функция ничего не возвращает, и программа может думать, что она тоже ложна.
function isValid(str) {
var iChars = "~`!#$%^&*+=-[]\\\';,/{}|\":<>?";
for (var i = 0; i < str.length; i++) {
if (iChars.indexOf(str.charAt(i)) != -1) {
alert ("File name has special characters ~`!#$%^&*+=-[]\\\';,/{}|\":<>? \nThese are not allowed\n");
return false;
}
}
return true;
}
Я пробовал это на своей хром-консоли, и он работал хорошо.
Попробуйте этот.
function containsSpecialCharacters(str){
var regex = /[ [email protected]#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/g;
return regex.test(str);
}
Если вы не хотите включать какой-либо специальный символ, попробуйте этот простой способ проверить специальные символы, используя RegExp \W Metacharacter.
var iChars = "~`!#$%^&*+=-[]\\\';,/{}|\":<>?";
if(!(iChars.match(/\W/g)) == "") {
alert ("File name has special characters ~`!#$%^&*+=-[]\\\';,/{}|\":<>? \nThese are not allowed\n");
return false;
}
Вы также можете сделать это таким образом.
specialRegex = /[^A-Z a-z0-9]/
specialRegex.test('test!') // evaluates to true
Потому что, если это не заглавная буква, строчная буква, число или пробел, это может быть только специальный символ