Expression régulière qui correspond à nombre en chaîne de caractères, mais pas les pourcentages
J'ai besoin de savoir si il y a une expression régulière pour tester la présence de nombres en chaînes:
- Correspond
Lorem 20 Ipsum
- Correspond
Lorem 2,5 Ipsum
- Correspond
Lorem 20.5 Ipsum
- Ne pas match
Lorem 2% Ipsum
- Ne pas match
Lorem 20.5% Ipsum
- Ne pas match
Lorem 20,5% Ipsum
- Ne pas match
Lorem 2 percent Ipsum
- Ne pas match
Lorem 20.5 percent Ipsum
- Ne pas match
Lorem 20,5 percent Ipsum
- Correspond
Lorem 20 Ipsum 2% dolor
- Correspond
Lorem 2,5 Ipsum 20.5% dolor
- Correspond
Lorem 20.5 Ipsum 20,5% dolor
Qui est une expression régulière qui peut me dire si dans une chaîne de caractères il y a un ou plusieurs numéros, mais pas en tant que pourcentage de la valeur.
J'ai essayé quelque chose comme /[0-9\.,]+[^%]/
, mais cela ne semble fonctionner, je pense que parce que chiffres puis pas un signe de pourcentage match aussi la 20
dans la chaîne 20%
. En outre, je ne sais pas comment dire pas l'ensemble de la percent
chaîne en plus de la %
char.
Alors, qu'avez-vous essayé?
Voir modifier.
Voir modifier.
OriginalL'auteur lorenzo-s | 2012-11-03
Vous devez vous connecter pour publier un commentaire.
Cela va faire ce dont vous avez besoin:
--EDIT--
La viande ici est l'utilisation d'une "anticipation négatif" sur la dernière ligne qui provoque le match à l'échec si tout d'un signe de pourcentage ou le caractère "%" se produit après un nombre et un ou plusieurs espaces. D'autres utilisations de l'anticipation négatif, les expressions régulières en JavaScript peut être trouvé à Anticipation négatif de l'Expression Régulière
--2E ÉDITION--
Félicitations à Enrico pour résoudre le cas le plus général, mais tandis que sa solution ci-dessous est correct, il contient plusieurs opérateurs étrangers. C'est là la plus succincte solution.
Merci pour le commentaire, mais l'OP n'a pas demandé à extraire les numéros, ni combien pourraient se produire dans une chaîne de caractères, seulement qu'ils existent. Ma réponse sera correspondre les chaînes qui contiennent des nombres qui ne sont pas des pourcentages, donc correspondant à la virgule est indifférente à l'OP. Merci encore.
Cette expression correspond à 20,5% en raison de l'optionalité de la partie décimale
Je ne crois pas que vous êtes correct. En raison de l'exigence que le numéro de suivi par un ou plusieurs espaces, de 20,5% ne correspondra pas.
Oui, comme ça ne sera pas du match, mais le fait qu'un certain nombre doit être suivie d'un espace à un nombre qui est faux. Ce ne sera pas correspondre à des nombres à la fin de la chaîne ou des numéros de suivi par tout ce qui n'est pas un espace. Par exemple, les phrases "je payer de 12,5$" ou "Le nombre est 5." contiennent des nombres qui ne sont pas des pourcentages. Si votre regex fonctionne correctement pour tous les cas de test que lorenzo fourni, mais ne fonctionne pas toujours.
OriginalL'auteur Rob Raisch
C'est le bon moyen pour le faire, et c'est aussi l'extraction de la les chiffres.
Il est semblable à Rob de la regex, mais il devrait fonctionner pour tous les cas.
Haha, de votre on a passé tous les tests, et vous avez été plus rapide que moi, donc +1 à vous aussi 🙂
Merci beaucoup les gars
Votre accueil lorenzo, c'était un beau défi!
OriginalL'auteur enrico.bacis
Utilisation anticipation négatif au lieu de votre nié le caractère de classe:
Cela ne fonctionne pas de la manière décrite par lorenzo à tous 🙂
De ne pas prendre trop lentes, mais votre solution de match: '10,1 pour cent", qui n'est probablement pas ce qui est nécessaire. 😉
OriginalL'auteur Bergi