tester un nombre inférieur ou égal à 1 ?

Le
Une Bévue
je valide une opacité [0, 1]

les formes valides :

000, 0.00012, 1, 1.0, 1.000000

invalides :

1.000002, 2. etc

ma regex actuelle :

var rr = /^0*1.?0*|0+.?[0-9]*$/;

mes différents tests :

console.debug("setRgbaVal -> rr.test('1') = " + rr.test('1'));
console.debug("setRgbaVal -> rr.test('2') = " + rr.test('2'));
console.debug("setRgbaVal -> rr.test('1.000') = " +
rr.test('1.000'));
console.debug("setRgbaVal -> rr.test('1.003') = " +
rr.test('1.003'));
console.debug("setRgbaVal -> rr.test('0.1234') = " +
rr.test('0.1234'));
console.debug("setRgbaVal -> rr.test('0.00000000') = " +
rr.test('0.00000000'));
console.debug("setRgbaVal -> rr.test('0') = " + rr.test('0'));
console.debug("setRgbaVal -> rr.test('00000') = " +
rr.test('00000'));


où j'obtiens :

[Debug] setRgbaVal -> rr.test('1') = true (colorwheel.html, line 187)
[Debug] setRgbaVal -> rr.test('2') = false (colorwheel.html, line 188)
[Debug] setRgbaVal -> rr.test('1.000') = true (colorwheel.html, line 189)
[Debug] setRgbaVal -> rr.test('1.003') = true (colorwheel.html, line 190)
[Debug] setRgbaVal -> rr.test('0.1234') = true (colorwheel.html, line 191)
[Debug] setRgbaVal -> rr.test('0.00000000') = true (colorwheel.html,
line 192)
[Debug] setRgbaVal -> rr.test('0') = true (colorwheel.html, line 193)
[Debug] setRgbaVal -> rr.test('00000') = true (colorwheel.html, line 194)

ça marche "assez" bien excepté un cas :

rr.test('1.003') = true

qui devrait me donner false.

ce que j'ai compris de ma regex :

il y a une alternative ("|") entre :

0*1.?0* qui aurait du couvrir les cas :

001, 1, 1., 1.0, 1.000000

mais qui accepte quand même 1.003 ???

et le cas où le nombre commence par "0" :
0+.?[0-9]*

qui couvre les cas :

000, 000., 0.xyz

le "^" au début et le "$" à la fin impliquent que toute la chaine est
testée.

où est mon erreur ?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Une Bévue
Le #26399203
Le 22/05/2016 10:28, Une Bévue a écrit :
var rr = /^0*1.?0*|0+.?[0-9]*$/;



bon, j'ai trouvé une partie de la solution, dans le cas strict précédent
je dois écrire :

var rr = /^0*1.?0*$|^0+.?[0-9]*$/;
___________________^_^_____________

pour bien écrire qu'il y a une alternative sur toute la chaine.

bon, ce n'était qu'un test pour rgba :

rgba( 0, 1, 3, opacité)

avec opacité le test précédent;

mais là pour l'ensemble du test, je ne peux pas utiliser "^" et "$"
seulement pour opacité.
kurtz le pirate
Le #26399895
Le 22/05/2016 à 10:28, Une Bévue a écrit :
je valide une opacité [0, 1]

les formes valides :

000, 0.00012, 1, 1.0, 1.000000

invalides :

1.000002, 2. etc




if (opacite >= 0 && opacite <= 1) {... }

?


--
kurtz le pirate
compagnie de la banquise
Une Bévue
Le #26400084
Le 28/05/2016 à 19:13, kurtz le pirate a écrit :
if (opacite >= 0 && opacite <= 1) {... }

?



oui, oui, j'ai du mal m'exprimer, il s'agissait d'une regex de
validation d'un input ayant un format de couleur style rgba ou hsla.

mais j'ai eu une très bonne réponse d'OM.
Publicité
Poster une réponse
Anonyme