9
votes

Comment puis-je permettre aux espaces dans cette regex?

Je suis un tel amateur chez Regex, comment puis-je autoriser les espaces (peu importe combien) dans cette regex? xxx


3 commentaires

Cette expression régulière permet déjà des espaces.


Je pense que la question est confuse à cause d'un double négatif. Voulez-vous que votre regex autorise les espaces ou l'état global d'autoriser des espaces?


: Espace: ou \ s pour n'importe quel blanchiment, ou: blanc: pour l'onglet / l'espace


6 Réponses :


22
votes
if(preg_match('/[^A-Za-z0-9_ -]/', $str)) return FALSE;
Note that I put the space before the hyphen.  If the space were after the hyphen, I would be specifying a character range from underscore to space.  (Issue also evadable by putting a backslash before the hyphen to escape it.)This is assuming that what you mean by "allow" is: this regex is being used to validate a character string, and if it matches, then the character string is disallowed (hence return FALSE).  So the characters in the negated character class ([^...]) are actually the allowed characters.  (This is causing some general confusion in this question.)

0 commentaires

1
votes

Si vous devez autoriser uniquement l'espace, vous aurez besoin de '/ /'

Si vous devez autoriser n'importe quel char (espace, onglet, nouvelle ligne) - Utilisez '/ \ S /'

Et si vous devez ajouter un espace à votre modèle (moyen d'ignorer l'espace) - Utilisez / [^ A-ZA-Z0-9_ \ -] /


0 commentaires

2
votes

Pas tant de réponse à votre question, mais un site que je trouve utile pour Vérification des expressions de regex . Il explique également la partie de chaque partie de l'expression / signifie que vous le survolez dans le champ de saisie.


0 commentaires

16
votes

le \ s dans l'expression régulière comme celui-ci '/ [^ A-ZA-Z0-9 _- S] /' de
signifie l'espace


0 commentaires

2
votes

Votre question n'est pas claire. L'expression régulière, telle qu'elle se tient, réussira si $ str a un caractère qui n'est pas a-za-z0-9 _- . Étant donné qu'un espace n'est pas l'un de ces caractères, l'expression régulière correspondra, et toute la déclaration renvoie false .

Si ce n'est pas ce que vous voulez, et que vous souhaitez que votre expression régulière correspond si $ str a un caractère qui n'est pas dans a-za-z0-9 _- ou un espace, alors vous devez le modifier en A-ZA-Z0-9_ - (notez l'espace entre le soulignement et le trait d'union). Ainsi, lorsque votre chaîne a un caractère qui n'est pas a-za-z0-9_ - , l'expression régulière correspondra et votre relevé retournera false . Si votre chaîne est composée entièrement de a-za-z0-9_ - , l'expression régulière ne correspondra pas à la correspondance et que votre traitement continuera à la ligne suivante.

edit: Voici un exemple: si votre chaîne est abc123def , l'expression régulière ne correspondra pas et que vous ne retournerez pas false . Si votre chaîne est abc123 def , l'expression régulière correspondra et l'instruction retournera false . Si vous modifiez la classe de caractères en A-ZA-Z0-9_ - , l'expression régulière ne correspondra pas aux deux abc123def et ABC123 def , et vous ne retournerez pas faux .


0 commentaires

0
votes

Il vous suffit d'ajouter un espace vide littéral dans votre classe de caractères annulée.

Il serait plus concis d'utiliser:

  • L'indicateur de cas insensible i et omettez l'une des chaînes de lettre
  • et écrire [0-9] comme \ d

    comme ceci: xxx

    mais mieux serait d'utiliser \ w qui représente [A-ZA-Z0- 9_] (qui est la plus grande de votre modèle) pour écrire: xxx

    Ce modèle indique que si $ str contient n'importe quel caractère non dans [A-za-z0-9_ -] puis false sera retourné.


0 commentaires