web-dev-qa-db-fra.com

Regex pour correspondre alphanumérique et des espaces

Qu'est-ce que je fais mal ici?

string q = "john s!";
string clean = Regex.Replace(q, @"([^a-zA-Z0-9]|^\s)", string.Empty);
// clean == "johns". I want "john s";
45
John Sheehan

juste un FYI

string clean = Regex.Replace(q, @"[^a-zA-Z0-9\s]", string.Empty);

serait en fait mieux comme

string clean = Regex.Replace(q, @"[^\w\s]", string.Empty);
65
Tim

Ce:

string clean = Regex.Replace(dirty, "[^a-zA-Z0-9\x20]", String.Empty);

\x20 est un hexadécimal ascii pour le caractère "espace"

vous pouvez ajouter plus de caractères individuels que vous souhaitez autoriser . Si vous voulez par exemple "?" pour être ok dans la chaîne de retour, ajoutez\x3f .

17
Evolved

J? ai compris:

string clean = Regex.Replace(q, @"[^a-zA-Z0-9\s]", string.Empty);

Je ne savais pas que vous pouviez mettre entre crochets

12
John Sheehan

Je soupçonne que ^ ne fonctionne pas comme vous le pensez en dehors d'une classe de personnage.

Ce que vous lui dites de faire, c'est de remplacer tout ce qui n'est pas alphanumérique par une chaîne vide, OR sans espace. Je pense que ce que vous voulez dire, c’est que les espaces ne peuvent pas être remplacés. Essayez de déplacer les\s dans la classe [].

3
zigdon

La regex suivante est pour l'inclusion d'espace dans la zone de texte.

Regex r = new Regex("^[a-zA-Z\\s]+");
r.IsMatch(textbox1.text);

Cela fonctionne bien pour moi. 

2
vivek

Il semble y avoir deux problèmes.

  1. Vous utilisez le ^ en dehors d'un [] qui correspond au début de la ligne
  2. Vous n'utilisez ni * ni +, ce qui signifie que vous ne ferez correspondre qu'un seul caractère.

Je pense que vous voulez la regex suivante @ "([^ a-zA-Z0-9\s]) +"

1
JaredPar

regex bottom avec espace, supporte toutes les lettres du clavier de différentes cultures

 string input = "78-selim güzel667.,?";
 Regex regex = new Regex(@"[^\w\x20]|[\d]");
 var result= regex.Replace(input,"");
 //selim güzel
0
zamoldar

La circonflexe à l'intérieur des crochets signifie tous les caractères sauf la plage suivante. Vous voulez un circumflexe en dehors des crochets.

0