8
votes

Comment faire correspondre un seul total de l'espace non seulement un seul espace utilisant des expressions régulières

Voici ce que j'ai actuellement, cela correspondra à des caractères alphanumériques et de l'espace:

^[a-z0-9\s]+$


2 commentaires

par "pas plus d'un espace" tu veux dire 0 ou 1? , c'est-à-dire que vous voulez aussi faire correspondre "gisisatest"?


Ouais, comme dans mon premier édition, le nom d'utilisateur pourrait être "Thisisaest", il ne doit pas nécessairement avoir un espace de l'espace, mais s'il ne devrait pas y avoir plus qu'un seul espace. C'est donc vraiment au moins 0 et pas plus de 1.


5 Réponses :


0
votes

Essayez:

^[a-z0-9]+(?: [a-z0-9]+)?$


1 commentaires

Je ne sais pas si une assertion positive sur la lunette placée devant le jeton recherché fonctionnera comme prévu. Afaik Lookahead Assertion est placé derrière le jeton cible. foo (? = bar) trouvera tous les foo S suivi de bar . D'autre part, (?! bar) FOO correspondra à tous les FOO de manière inconditionnelle. Même ceux précédés de bar



1
votes

C'est assez facile, il suffit de le construire dans des morceaux. XXX

Un ou plusieurs alphanumériques, puis un groupe optionnel constitué d'un seul espace suivi d'une ou plusieurs alphanumériques. (BTW, \ s correspond à un caractère d'espacement, pas d'espace. C'est-à-dire qu'il correspond à [\ t \ n] . Lequel voulez-vous réellement?)


2 commentaires

Cela semble ignorer le premier caractère même si le premier caractère n'est pas un espace.


@Reality Extractor: Pas sûr de cela spécifiquement, mais j'ai réussi à laisser tomber un $ sur le sol et sans que le regex est susceptible de ne rien faire du tout utile. (Je ne peux pas vraiment obtenir ce que vous dites du résultat, cependant.) Le test printf 'AAA BBB \ na bab \ naba \ nabab \ n BA B \ NAV D \ N AC \ NDE \ N' | Perl -lne 'Imprimer Si / ^ [A-Z0-9] + (?: [A-Z0-9] +)? $ /' est la bonne chose pour moi.



1
votes

devrait être aussi simple que cela. Correspond à 0 ou 1 caractère d'espacement au milieu du texte. Bien qu'il correspond aussi aux onglets.

[a-z0-9]+\s{0,1}[a-z0-9]+


1 commentaires

Cette regex ne va pas correspondre à des chaînes de caractères unique.



8
votes

permettra au plus d'espace entre les deux.

^ [A-ZA-Z0-9] + \ S? [A-ZA-Z0-9] + $

permettra exactement un espace entre

^ [A-ZA-Z0-9] + \ S [A-ZA-Z0-9] + $

Edit1:

ci-dessus Solutions n'accepte pas les chaînes de caractères unique.

Les solutions ci-dessous correspond également aux chaînes de caractères simples

^ [A-ZA-Z0-9] + ([] [A-ZA-Z0-9] +)? $


3 commentaires

Correspond aux espaces de début et de fin. * devrait être +.


Cette regex ne va pas correspondre à des chaînes de caractères unique.


Je pense que correspondant à un seul caractère n'était pas requis par l'asker, car cela signifierait également «i> edit« i> edit : il est requis par l'asker dans sa version verso



5
votes

Nettoyez d'abord le nom d'utilisateur en coupant des espaces de pointe et de suivi.

^[a-z0-9]+(?: [a-z0-9]+)?$


1 commentaires

Les quantificateurs possessifs sont absolument inutiles ici. Supprimé.