2013-10-03 2 views
2

J'utilise une expression régulière pour valider un motif suivi d'une fraction. Je les ai trouvés et ils correspondent à ce dont j'ai besoin. Globalement, je veux correspondre à 1 to 2 numéros suivis par la fraction. En quoi ces expressions sont-elles différentes?Motif correspondant à une fraction

/^[0-9]+(?:[\xbc\xbd\xbe])$/ugm 

/^\d+(?:[\xbc\xbd\xbe])$/ugm 

/^\w+(?:\w+)$/ugm 

J'ai besoin de faire correspondre les éléments suivants:

12½ 
1¼ 
11¾ 

mais pas correspondre ..

111½ 
11111¼ 
0¾ 

Répondre

2

Eh bien pour commencer, [0-9] correspond à tout caractère de: (0-9) et n'est pas la même chose que \d

\d chiffres matches (0-9) et d'autres chiffres des caractères tels que Unicode.

\w correspond à tout caractère de mot (lettre, nombre ou Souligner)

Bien que ces expressions données peuvent correspondre au même schéma, vous finirez par échouer en utilisant votre 3ème solution. Il va correspondre à un modèle comme foobar où comme vous pouvez le voir, il n'y a pas de caractères (0-9) ou de fractions Unicode dans ce modèle.

Et avec l'exécution d'un indice de référence rapide, votre 2ème solution est d'environ 16% plus lent que votre premier, plus il correspond à Unicode et d'autres caractères numériques.

Je voudrais coller avec votre première expression, et le modifier pour correspondre entre 1-2 caractères numériques.

/^[1-9][0-9]?(?:[\xbc\xbd\xbe])$/ugm 

ou même

/^[1-9][0-9]?(?:[\xbc-\xbe])$/ugm 
+0

Merci pour votre réponse détaillée –

+0

Content que je puisse vous aider. – hwnd

1

les opérations suivantes:

^[1-9][0-9]?[\xbc\xbd\xbe]$ 

[0-9] et \d sont équivalentes . \w correspond à un caractère "mot". L'expression [1-9] correspond à un chiffre qui n'est pas nul (puisque vous avez spécifiquement demandé comment l'exclure).

Ce code dur non attractif pour certains jeux de caractères hérités de 8 bits; Pour une compatibilité future, vous devriez envisager de passer à Unicode.

+0

cela correspondra à "0¾" –

+1

Maintenant, il ne le fait pas, merci de commenter. – tripleee

+0

Merci. Réponse très utile –

1

Vous pouvez

/^[1-9][0-9]?(?:[\xbc\xbd\xbe])$/ugm 
+3

Il devrait être '[1-9] [0-9]'. Vous devriez supprimer le '+'. –

+0

merci de souligner cela. –

+0

Il devrait être '[1-9] [0-9]?'. Il doit correspondre aux nombres à un et deux chiffres. – John