Bug Tracker

Opened 6 years ago

Closed 6 years ago

Last modified 5 years ago

#10858 closed bug (fixed)

css.js regular expressions are incomplete

Reported by: gibson042 Owned by: gibson042
Priority: low Milestone: 1.7.2
Component: css Version: 1.7.1
Keywords: Cc:
Blocked by: Blocking:


A review of pull request #610 revealed some flaws in css.js regular expressions with respect to CSS number values. They should be extended as follows in order to properly deal with explicit positives and non-integer reals:

rnumpx =   /^[-+]?\d*(?:\d|\.\d+)(?:px)?$/i
rnumnopx = /^[-+]?\d*(?:\d|\.\d+)(?!px)[^\d\s]+$/i

Test case: http://jsfiddle.net/7XGfE/

Change History (6)

comment:1 Changed 6 years ago by timmywil

Component: unfiledcss
Milestone: None1.7.2
Priority: undecidedlow
Status: newopen

At first glance, this looks correct.

comment:2 Changed 6 years ago by gibson042

Performance analysis: http://jsperf.com/2011-11-23-regexp-complexity/2

I tested the decimal-rejecting expression against three decimal-accepting expressions. The net slowdown of .css(property) was generally within the margin of error reported by jsperf, especially on the fastest of the three (1%).

Since the fastest pattern is also the shortest, I recommend implementing it immediately:

rnumnopx = /^-?\d*(?:\d|\.\d+)(?!px)[^\d\s]+$/i
rnumpx = /^[-+]?\d*(?:\d|\.\d+)(?:px)?$/i

comment:3 Changed 6 years ago by mikesherov

Owner: set to mikesherov
Status: openassigned

comment:4 Changed 6 years ago by mikesherov

Owner: changed from mikesherov to gibson042

comment:6 Changed 6 years ago by Richard Gibson

Resolution: fixed
Status: assignedclosed

Fix #10858: CSS regexps recognize non-integer and explicit positive numbers.

Changeset: d6500cc8ded8d3d02e19a3ab831b6b9cf43e82ae

Note: See TracTickets for help on using tickets.