Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

3 réponses
Avatar
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 ?

3 réponses

Avatar
Une Bévue
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é.
Avatar
kurtz le pirate
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
Avatar
Une Bévue
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.