Comment vérifier si une chaîne contient des caractères spéciaux (!@#$%^&*()_+)
Je me demandais quelle serait la meilleure façon de vérifier si une chaîne de caractères comme
$str
contient l'un des caractères suivants
!@#$%^&*()_+
J'ai pensé à l'aide de valeurs ASCII, mais était un peu confus sur exactement comment cela pourrait être mis en œuvre.
Ou si il y a un moyen plus simple de simplement vérifier la chaîne contre les valeurs.
Si vous voulez juste pour vérifier la non-alphanumériques, par la manière, ce serait
...ou, pour vérifier tout/toutes sortes de signes de ponctuation,
[[ $str = *[^[:alnum:]]* ]]
....ou, pour vérifier tout/toutes sortes de signes de ponctuation,
[[ $str = *[[:punct:]]* ]]
. En général, l'utilisation des classes de caractères POSIX (tout caractère de classe dans man 7 regexp
sur Linux va fonctionner, même si glob-style les modèles ne sont pas POSIX REs) plutôt que d'énumérer personnages un par un est une bonne idée, si il y a une classe de caractère qui s'adapte (ou dont la négation pour) ce que vous faites.OriginalL'auteur deadcell4 | 2014-10-29
Vous devez vous connecter pour publier un commentaire.
Match contre un glob. Vous avez juste à échapper les caractères que l'shell estime spécial:
OriginalL'auteur that other guy
C'est portable pour le tableau de bord et coll. et à mon humble avis, plus élégant.
OriginalL'auteur tripleee
En utilisant expr
expr
était inévitable, mais ce n'était pas un de ces cas, même à l'époque, dans les âges sombres.OriginalL'auteur Hackaholic
Vous pouvez également utiliser une regexp:
Il n'y a rien échapper, parce que les caractères spéciaux sont dans l'unique chaîne de caractères entre guillemets; le
[]
signifie "rien dans le contenu de la chaîne"; et parce qu'il n'est pas^
ou$
dans le modèle, il correspondra à n'importe où dans le$str
.OriginalL'auteur Oliver
Je pense qu'une façon simple de le faire serait comme supprimer des caractères alphanumériques et de l'espace.
echo "$str" | grep -v "^[a-zA-Z0-9 ]*$"
Si vous avez un tas de cordes, puis les mettre dans un fichier, comme strFile et commande suivante serait de faire le nécessaire.
cat strFile | grep -v "^[a-zA-Z0-9 ]*$"
cat
.OriginalL'auteur R. Kumar