@@ -120,6 +120,7 @@ impl ColumnRule {
120
120
NumericOperator :: GreaterThanEquals => "greater than or equal to" ,
121
121
NumericOperator :: LessThan => "less than" ,
122
122
NumericOperator :: LessThanEquals => "less than or equal to" ,
123
+ NumericOperator :: Regex => "matches regex" ,
123
124
} ,
124
125
value,
125
126
repeats
@@ -138,10 +139,11 @@ impl ColumnRule {
138
139
"{} column {} {}, {} times" ,
139
140
column,
140
141
match operator {
141
- StringOperator :: Exact => "was equal to" ,
142
- StringOperator :: NotExact => "was not equal to" ,
143
- StringOperator :: Contains => "contained" ,
144
- StringOperator :: NotContains => "did not contain" ,
142
+ StringOperator :: Exact => "equal to" ,
143
+ StringOperator :: NotExact => "not equal to" ,
144
+ StringOperator :: Contains => "contains" ,
145
+ StringOperator :: NotContains => "does not contain" ,
146
+ StringOperator :: Regex => "matches regex" ,
145
147
} ,
146
148
value,
147
149
repeats
@@ -292,9 +294,9 @@ mod tests {
292
294
}
293
295
294
296
pub mod base {
295
- use serde:: { Deserialize , Serialize } ;
296
-
297
297
use self :: ops:: { NumericOperator , StringOperator } ;
298
+ use regex:: Regex ;
299
+ use serde:: { Deserialize , Serialize } ;
298
300
299
301
#[ derive( Debug , Serialize , Deserialize ) ]
300
302
#[ serde( rename_all = "camelCase" ) ]
@@ -328,6 +330,10 @@ pub mod base {
328
330
NumericOperator :: LessThanEquals => {
329
331
number. as_f64 ( ) . unwrap ( ) <= self . value . as_f64 ( ) . unwrap ( )
330
332
}
333
+ NumericOperator :: Regex => {
334
+ let re: Regex = regex:: Regex :: new ( & self . value . to_string ( ) ) . unwrap ( ) ;
335
+ re. is_match ( & number. to_string ( ) )
336
+ }
331
337
} ;
332
338
333
339
Some ( res)
@@ -361,13 +367,21 @@ pub mod base {
361
367
StringOperator :: NotContains => !string
362
368
. to_ascii_lowercase ( )
363
369
. contains ( & self . value . to_ascii_lowercase ( ) ) ,
370
+ StringOperator :: Regex => {
371
+ let re: Regex = regex:: Regex :: new ( & self . value ) . unwrap ( ) ;
372
+ re. is_match ( string)
373
+ }
364
374
}
365
375
} else {
366
376
match self . operator {
367
377
StringOperator :: Exact => string. eq ( & self . value ) ,
368
378
StringOperator :: NotExact => !string. eq ( & self . value ) ,
369
379
StringOperator :: Contains => string. contains ( & self . value ) ,
370
380
StringOperator :: NotContains => !string. contains ( & self . value ) ,
381
+ StringOperator :: Regex => {
382
+ let re: Regex = regex:: Regex :: new ( & self . value ) . unwrap ( ) ;
383
+ re. is_match ( string)
384
+ }
371
385
}
372
386
} ;
373
387
@@ -393,6 +407,8 @@ pub mod base {
393
407
LessThan ,
394
408
#[ serde( alias = "<=" ) ]
395
409
LessThanEquals ,
410
+ #[ serde( alias = "~" ) ]
411
+ Regex ,
396
412
}
397
413
398
414
impl Default for NumericOperator {
@@ -412,7 +428,8 @@ pub mod base {
412
428
Contains ,
413
429
#[ serde( alias = "!%" ) ]
414
430
NotContains ,
415
- // =~ and !~ reserved for regex
431
+ #[ serde( alias = "~" ) ]
432
+ Regex ,
416
433
}
417
434
418
435
impl Default for StringOperator {
0 commit comments