2015-08-31 22 views
6

Chcę sprawdzić, czy ciąg zawiera znaki specjalne takie jak! @ # $%^& *., <>/\ '";:? I zwraca wartość true, jeśli ciąg zawiera co najmniej jeden z tych znaków . znakówSprawdzanie znaków specjalnych w ciągu znaków

próbowałem z następującym regex, scenariusz:

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

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

Jeśli ciąg zawiera tylko znaki specjalne to zwraca true, ale jeśli ciąg zawiera coś innego jak alfanumerycznych znaków (Przykład1,. przykład2) zwraca wartość false.

+1

Chcesz, abyśmy napisali dla Ciebie wyrażenie regularne? – csmckelvey

+0

usuń kotwice i kwantyfikator. Aby być bardziej zwięzłym, możesz użyć potrójnego operatora podobnego do tego: 'return str.match (format)? true: false; ' –

+0

@Tendendarkk, tak to wygląda? nie, chcę rady na temat tego, co zrobiłem źle –

Odpowiedz

5

Proponuję za pomocą RegExp .test() funkcję do sprawdzania dopasowania wzorca, a jedyną rzeczą, którą trzeba zmienić, to usunąć Początek/Koniec kotew liniowych (a * kwantyfikator jest zbędny) w regex:

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"));

Kotwy (jak ^ początek sznurka/linii , $ koniec linii/linii i \b granic słów) może ograniczać mecze w określonych miejscach ciągu. Podczas korzystania z ^ aparat wyrażeń regularnych sprawdza, czy następny znak podrzędny pojawia się na samym początku ciągu znaków (lub linii, jeśli w wyrażeniu regularnym zadeklarowano modyfikator /m). Ten sam przypadek z $: poprzednie pod-wzornictwo powinno pasować dokładnie na końcu łańcucha.

W twoim przypadku chcesz sprawdzić istnienie znaku specjalnego z zestawu w dowolnym miejscu w ciągu znaków. Nawet jeśli jest tylko jeden, chcesz zwrócić false. W związku z tym należy usunąć zakotwiczenia i kwantyfikator *. Kwantyfikator * dopasowałby nawet pusty ciąg znaków, dlatego musimy go usunąć, aby faktycznie sprawdzić obecność co najmniej 1 znaku specjalnego (właściwie bez kwantyfikatorów, które sprawdzamy dla jednego wystąpienia, dokładnie tak, jakbyśmy używali {1} ograniczający kwantyfikator).

+0

dziękuję, zadziałało ... chociaż nie jest jasne, dlaczego ... czy możesz podać krótkie wyjaśnienie? –

+1

Jasne, daj mi tylko 3 minuty ... Zrobione. –

+0

i czy chcę też szukać pustej przestrzeni? co powinienem zmienić? –

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

Twój regexp używa ^ i $, więc próbuje dopasować cały ciąg. A jeśli chcesz uzyskać tylko wynik boolowski, użyj test zamiast match.

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

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

Usuń znaki ^ (początek napisu) i $ (koniec string) z wyrażenia regularnego.

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

Czy nie byłoby łatwiej dopasować ujemne znaki alfanumeryczne?

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

"... zwraca true, jeśli ciąg zawiera co najmniej jedną [znak specjalny] ..." – Teemu

+0

Rzeczywiście, złe pytanie koliduje z samym sobą = (. – Teemu

+0

Naprawiono moją odpowiedź, powinien teraz mieć więcej sensu. –

-1

Można spróbować to:

regex = [\W_]

Na pewno pomoże.

Powiązane problemy