Regex pour pas vide et pas d'espaces

J'essaie de créer une expression rationnelle qui retournera false si le motif de chaîne contient des espaces ou est vide. Jusqu'à présent, j'ai ceci

[^s] 

Je pense que cela va s'assurer que la chaîne ne contient pas d'espaces mais je ne sais pas comment vérifier aussi pour s'assurer qu'elle n'est pas vide. Toute aide serait appréciée.

25
demandé sur James A Mohler 2011-11-01 17:20:32

5 réponses

/^$|\s+/ si cela correspond, il y a des espaces ou son vide.

37
répondu Jan. 2011-11-01 13:23:01

La plupart des moteurs d'expression régulière prennent en charge les séquences d'échappement" counter part". C'est, pour \s (espace blanc) il y a sa contre-partie \S (non-blanc).

En utilisant ceci, vous pouvez vérifier, s'il y a au moins un caractère non-espace blanc avec ^\S+$.

PCRE pour PHP a plusieurs de ces séquences d'échappement.

13
répondu Linus Kleen 2011-11-01 13:22:49

À ma connaissance, vous voulez faire correspondre une chaîne non vide et non vide, donc la réponse supérieure fait le contraire. Je suggère:

(.|\s)*\S(.|\s)*

- correspond à toute chaîne contenant au moins un caractère non-espace (le \S au milieu). Il peut être précédé et suivi de n'importe quoi, n'importe quelle séquence de caractères ou d'espaces (y compris les nouvelles lignes) - (.|\s)*.

, Vous pouvez l'essayer avec des explications sur https://regex101.com/.

9
répondu Tony 2017-08-29 08:13:17

J'ai fini par utiliser quelque chose de similaire à la réponse acceptée, avec des modifications mineures

(^$)|(\s+$)

Explication par la Expresso

Select from 2 alternatives (^$)
    [1] A numbered captured group ^$
        Beginning of line ^
        End of line $
    [2] A numbered captured group (\s+$)
        Whitespace, one or more repetitions \s+
        End of line $
5
répondu oleksii 2014-09-22 15:59:57

/^[\s]*$/ correspond uniquement aux chaînes vides et aux chaînes contenant des espaces

-1
répondu micfra 2011-11-01 13:25:55