2015-08-31 4 views
6

Я хочу проверить, содержит ли строка специальные символы, такие как! @ # $%^& *., <>/\ '";:? И возвращать true, если строка содержит по крайней мере одну из этих . символыПроверить специальные символы в строке

Я попытался с помощью следующего регулярного выражения, сценарий:

var format = /^[[email protected]#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]*$/; 

if(string.match(format)){ 
    return true; 
}else{ 
    return false; 
} 

Если строка содержит только специальные символы, то она возвращает верно, но если строка содержит что-то еще, как буквенно-цифровые символы (example1,. example2), он возвращает false.

+1

Итак, вы хотите, чтобы мы создали для вас регулярное выражение? – csmckelvey

+0

удалите якоря и квантификатор. Чтобы быть более кратким, вы можете использовать тернарный оператор следующим образом: 'return str.match (format)? true: false; ' –

+0

@Takendarkk, вот как оно выглядит? нет, я хочу совет о том, что я сделал неправильно –

ответ

5

Я предлагаю использовать RegExp .test() функцию для проверки на совпадение рисунка, и единственное, что вам нужно изменить, это удалить начало/конец строки (и * квантора также избыточный) в регулярное выражение:

var format = /[ [email protected]#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/; 
 
//   ^        ^ 
 
document.write(format.test("[email protected](some%text)") + "<br/>"); 
 
document.write(format.test("My string with spaces") + "<br/>"); 
 
document.write(format.test("MyStringContainingNoSpecialChars"));

анкеры (как ^ начало строки/линии , $ конец od строка/строка и \b границы слов) могут ограничивать совпадения в определенных местах в строке. При использовании ^ механизм регулярных выражений проверяет, появляется ли следующий подшаблон прямо в начале строки (или строка, если модификатор /m объявлен в регулярном выражении). Тот же случай с $: предыдущий подшаблон должен совпадать прямо в конце строки.

В вашем случае вы хотите проверить наличие специального символа из набора в любом месте в строке. Даже если это только один, вы хотите вернуть false. Таким образом, вы должны удалить анкеры и квантификатор *. Коэффициент * будет соответствовать даже пустой строке, поэтому мы должны удалить его, чтобы фактически проверить наличие как минимум 1 специального символа (фактически, без каких-либо кванторов мы проверяем точно в одном случае, как если бы мы использовали {1} ограничивающий квантификатор).

+0

спасибо, это сработало ... хотя неясно, почему ... можете ли вы сделать короткое объяснение? –

+1

Конечно, просто дай мне 3 минуты .... Сделано. –

+0

, и если я тоже хочу искать пустое пространство? что я должен изменить? –

1

var specialChars = "<>@!#$%^&*()_+[]{}?:;|'\"\\,./~`-="; 
 
var checkForSpecialChar = function(string){ 
 
for(i = 0; i < specialChars.length;i++){ 
 
    if(string.indexOf(specialChars[i]) > -1){ 
 
     return true 
 
    } 
 
} 
 
return false; 
 
} 
 

 
var str = "YourText"; 
 
if(checkForSpecialChar(str)){ 
 
    alert("Not Valid"); 
 
} else { 
 
    alert("Valid"); 
 
}

4

Ваше регулярное выражение использует ^ и $, поэтому оно пытается сопоставить всю строку. И если вы хотите получить только логическое значение, используйте test вместо match.

var format = /[[email protected]#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]+/; 

if(format.test(string)){ 
    return true; 
} else { 
    return false; 
} 
1

Удалить символы ^ (начало строки) и $ (конец строки) из регулярного выражения.

var format = /[[email protected]#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/; 
2

Не было бы проще вместо отрицательного соответствия алфавитумерам?

return string.match(/^[^a-zA-Z0-9]+$/) ? true : false; 
+0

«... вернуть true, если строка содержит по крайней мере один [специальный символ] ...» – Teemu

+0

Действительно, плохой вопрос, конфликтующий с самим собой = (. – Teemu

+0

Исправлен мой ответ, теперь должен иметь больше смысла. –

-1

Вы можете попробовать это:

regex = [\W_]

Это, безусловно, поможет вам.

Смежные вопросы