Je suis un tel amateur chez Regex, comment puis-je autoriser les espaces (peu importe combien) dans cette regex?
6 Réponses :
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.)
Si vous devez autoriser uniquement l'espace, vous aurez besoin de '/ /' p>
Si vous devez autoriser n'importe quel char (espace, onglet, nouvelle ligne) - Utilisez '/ \ S /' P>
Et si vous devez ajouter un espace à votre modèle (moyen d'ignorer l'espace) - Utilisez / [^ A-ZA-Z0-9_ \ -] / P>
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. P>
le \ s b> code> dans l'expression régulière comme celui-ci '/ [^ A-ZA-Z0-9 _- S] /' code> de
signifie l'espace p>
Votre question n'est pas claire. L'expression régulière, telle qu'elle se tient, réussira si Si ce n'est pas ce que vous voulez, et que vous souhaitez que votre expression régulière correspond si edit: strong> Voici un exemple: si votre chaîne est $ str code> a un caractère qui n'est pas a-za-z0-9 _- code>. É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 code>. P>
$ str code> a un caractère qui n'est pas dans a-za-z0-9 _- Code> ou un espace, alors vous devez le modifier en A-ZA-Z0-9_ - CODE> (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_ - code>, l'expression régulière correspondra et votre relevé retournera false code>. Si votre chaîne est composée entièrement de a-za-z0-9_ - code>, l'expression régulière ne correspondra pas à la correspondance et que votre traitement continuera à la ligne suivante. P>
abc123def code>, l'expression régulière ne correspondra pas et que vous ne retournerez pas false code>. Si votre chaîne est abc123 def code>, l'expression régulière correspondra et l'instruction retournera false code>. Si vous modifiez la classe de caractères en A-ZA-Z0-9_ - CODE>, l'expression régulière ne correspondra pas aux deux abc123def code> et ABC123 def code >, et vous ne retournerez pas faux code>. p>
Il vous suffit d'ajouter un espace vide littéral dans votre classe de caractères annulée.
Il serait plus concis d'utiliser: P>
i code> et omettez l'une des chaînes de lettre li>
- et écrire
[0-9] code> comme \ d code> li>
ul> comme ceci: p> xxx pré> mais mieux serait d'utiliser \ w code> qui représente [A-ZA-Z0- 9_] (qui est la plus grande de votre modèle) pour écrire: p> xxx pré> Ce modèle indique que si $ str code> contient n'importe quel caractère non dans [A-za-z0-9_ -] code> puis false code> sera retourné. P> p>
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