Index: trunk/resources/data/validator/combinations.mapcss
===================================================================
--- trunk/resources/data/validator/combinations.mapcss	(revision 19129)
+++ trunk/resources/data/validator/combinations.mapcss	(revision 19140)
@@ -757,5 +757,5 @@
 
 /* #17391 */
-way[highway=pedestrian][width][width<3] {
+way[highway=pedestrian][width][siunit_length(tag(width))<3] {
   throwWarning: tr("{0} together with {1}", "{0.tag}", "{1.tag}");
   suggestAlternative: "highway=footway";
@@ -1061,5 +1061,5 @@
 
 /* #21286 */
-area[/^(building|building:part)$/][height =~ /^[0-9]+(\.[0-9]+)?( m)?$/][min_height =~ /^[0-9]+(\.[0-9]+)?( m)?$/][get(split(" ", tag(height)), 0) <= get(split(" ", tag(min_height)), 0)],
+area[/^(building|building:part)$/][height][min_height][siunit_length(tag(height)) <= siunit_length(tag(min_height))],
 area[/^(building|building:part)$/][building:levels][building:min_level][tag("building:levels") <= tag("building:min_level")] {
   throwWarning: tr("{0} is lower or equal to {1} on {2}", "{1.key}", "{2.key}", "{0.key}");
Index: trunk/resources/data/validator/numeric.mapcss
===================================================================
--- trunk/resources/data/validator/numeric.mapcss	(revision 19129)
+++ trunk/resources/data/validator/numeric.mapcss	(revision 19140)
@@ -68,5 +68,5 @@
 }
 
-*[roof:height][roof:height =~ /^0*(\.0*)?( (m|ft))?$/][roof:shape=flat] {
+*[roof:height][siunit_length(tag("roof:height")) == 0][roof:shape=flat] {
   throwWarning: tr("{0} is unnecessary for {1}", "{0.tag}", "{2.tag}");
   group: tr("unnecessary tag");
