7
votes

Expression régulière pour correspondre à une chaîne vide (ou à tous bluespaces)

Je veux faire correspondre une chaîne pouvant avoir tout type de caractères blancheurs (spécifiquement j'utilise PHP). Ou tout moyen de dire si une chaîne est vide ou si WhitSpace aidera également!


0 commentaires

7 Réponses :


18
votes

Vous n'avez pas besoin d'expressions régulières pour cela, utilisez simplement:

if ( Trim ( $str ) === '' ) echo 'empty string';


5 commentaires

+1: Ce sera plus rapide que de compiler une regex et plus lisible / maintenable.


C'est vrai, mais ne peut pas convenir à tous les cas. par exemple. Modèle de génération de dynamisme et utilisant uniquement une fois Preg_Match ($ motif, $ str)


@Dominic: "Trim" fonctionne aussi bien que "couper", c'est juste une question de style de codage :)


Et (de côté de la casse-insensibilité) commençant une fonction avec une lettre majuscule est un style presque tous les développeurs PHP éviteraient


Comme je l'ai dit, c'est une question de style. Je suppose que j'ai apporté ça de mes jours .net ...



1
votes
if(preg_match('^[\s]*[\s]*$', $text)) {
    echo 'Empty or full of whitespaces';
}
^[\s]* means the text must start with zero or more whitespace and [\s]*$ means must end with zero or more whitespace, since the expressions are "zero or more", it also matches null strings.

4 commentaires

1. Il n'y a pas de parenthèses assorties dans cette regex. 2. Il n'y a pas de délimiteurs non plus. 3. Vous voudrez peut-être expliquer si cela vérifie une chaîne vide ou non vide.


Je ne comprends pas tous les upvotes pour cette réponse. C'est beaucoup trop verbeux. La regex suivante fait exactement la même chose: ^ \ s * $ . Vous n'avez pas besoin de mettre le \ s dans une classe de caractères et que vous n'avez pas besoin de l'ajouter deux fois. -1 De moi, désolé.


Quand j'écris d'abord, c'était exactement ce que vous dites. Je l'ai changé pour la clarté et la demande d'explication de Nickf.


Eh bien, imo, vous ne l'avez pas changé pour le mieux.



-1
votes

expression est \ a \ s * + \ z


1 commentaires

Qu'en est-il de \ z ? À partir de la documentation \ z correspondant à la fin de la chaîne, ou avant la nouvelle ligne à la fin; où comme \ z correspond à la fin de la chaîne uniquement.



0
votes

Vous n'avez pas vraiment besoin d'une regex xxx


0 commentaires

2
votes
if ( trim($text) === '' ) {
    //empty
}

2 commentaires

Le premier échoue sur, ironiquement, une chaîne vide. Changez-vous à une correspondance * et ajoutez des délimiteurs et vous avez raison.


Toujours pas de délimiteurs. Votre expression régulière a besoin d'eux.



9
votes

Vérification de la longueur de la chaîne trempée ou la comparaison de la chaîne trempée à une chaîne vide est probablement la plus rapide et la plus facile à lire, mais il y a des cas où vous ne pouvez pas utiliser cela (par exemple, lors de l'utilisation d'un cadre pour Validation qui ne prend qu'une regex).

puisque personne d'autre n'a réellement publié une regex de travail encore ... xxx

ou xxx < / pré>


0 commentaires

0
votes

La réégalité suivante vérifie via Lookahead et l'assertion de LookeBehind, si la chaîne contient des espaces blancheurs au début ou à la fin ou si la chaîne est vide ou ne contient que WhitSpace: xxx p> invalide (intérieur "): xxx

valide (intérieur"): xxx


0 commentaires