How To Detect Special Characters

How could I find out if there are any special characters in my string? Suppose I have the string '1asdf?', how could I detect if there is a special character in there?

2 comentarios

Cedric
Cedric el 10 de Sept. de 2017
What is the purpose? Do you need a true/false type of answer, the position of special characters, to eliminate them, ..? How to you define "special"?
William Nelson
William Nelson el 10 de Sept. de 2017
Editada: Cedric el 10 de Sept. de 2017
I need a true and false answer and a special character is anything that is not abc or 123. ?"{} would all be special characters.

Iniciar sesión para comentar.

 Respuesta aceptada

Steven Lord
Steven Lord el 10 de Sept. de 2017

2 votos

Use isstrprop with category 'alphanum' to identify letters and digits.

Más respuestas (1)

per isakson
per isakson el 10 de Sept. de 2017
Editada: per isakson el 10 de Sept. de 2017
>> str = regexp( '1asdf?', '[^\w]', 'match' )
str =
'?'
where I defined not being special as "Any alphabetic, numeric, or underscore character. For English character sets, \w is equivalent to [a-zA-Z_0-9]"
In response to comment
"I need a true and false answer and a special character is anything that is not abc or 123. ?"{} would all be special characters."
>> str = '1a$s#df?';
>> is_special = false( size( str ) );
>> is_special( regexp( str, '[^a-zA-Z0-9.?"{}]' ) ) = true
is_special =
0 0 1 0 1 0 0 0
>>
I assumed that "123" is short for "0123456789". However, after a second reading
is_special( regexp( str, '[^123abc]' ) ) = true
is_special =
0 0 1 1 1 1 1 1
>>

4 comentarios

Cedric
Cedric el 10 de Sept. de 2017
'[^\w]' = '\W'
per isakson
per isakson el 10 de Sept. de 2017
Good point!
Cedric
Cedric el 10 de Sept. de 2017
Editada: Cedric el 10 de Sept. de 2017
Given your comment after Per answered, William, which seems to indicate that the underscore '_' is a special character, I think that you want a variant of Per's solution:
>> specials = regexp( '1as_df?980{}', '[^A-Za-z0-9]', 'match' )
specials =
1×4 cell array
'_' '?' '{' '}'
or
>> specialsPos = regexp( '1as_df?980{}', '[^A-Za-z0-9]', 'start' )
specialsPos =
4 7 11 12
or
>> isOk = isempty( regexp( '1as_df?980{}', '[^A-Za-z0-9]', 'start' ))
isOk =
logical
0
where the pattern fully defines characters that are not special, and eliminate the underscore which is not matched by \W.
per isakson
per isakson el 10 de Sept. de 2017
A typesetter shall follow the manuscript even if it blows out of the window. Does that make sense in English?
One more answer
>> isvarname('1a$s#df?')
ans =
0

Iniciar sesión para comentar.

Categorías

Más información sobre Characters and Strings en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 10 de Sept. de 2017

Respondida:

el 10 de Sept. de 2017

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by