From 31a4b5aba8d11a39f87192afc2a7a6fe3e922396 Mon Sep 17 00:00:00 2001 From: kuch3n Date: Sun, 20 Mar 2022 15:07:28 +0100 Subject: [PATCH 1/2] Support for DateTime strings E.g.: start_date le '2021-03-20T00:00:00-00:00', see: https://regex101.com/r/zFZyWT/1 - Added usage of \w, which is equivalent to [a-zA-Z0-9_] PS: i hope this is the correct OData syntax :P --- src/Http/Traits/Filterable.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Http/Traits/Filterable.php b/src/Http/Traits/Filterable.php index 48d8aed..1bd1829 100644 --- a/src/Http/Traits/Filterable.php +++ b/src/Http/Traits/Filterable.php @@ -41,7 +41,7 @@ trait Filterable */ protected function applyFilters(Request $request, Builder $query) { - $regex = "/((?'field'[a-z_]+)\s+(?'operator'eq|ne|gt|lt|ge|le)\s+(?'value'(?>'[a-z0-9_\s]+')|(?>[a-z0-9_]+))(\s+(?'join'and|or))?)+/"; + $regex = "/((?'field'[a-z_]+)\s+(?'operator'eq|ne|gt|lt|ge|le)\s+(?'value'(?>'[\w\-:\s]+')|(?>[\w]+))(\s+(?'join'and|or))?)+/"; if (preg_match_all($regex, $request->query('$filter', ''), $filters) === false) return $query; From 3b2b43e3b7eb74c3980219c95b717f5f6c3909dc Mon Sep 17 00:00:00 2001 From: kuch3n Date: Mon, 21 Mar 2022 12:12:02 +0100 Subject: [PATCH 2/2] Match anything inside a string Match any Character but be lazy `'[\s\S]+?'` https://regex101.com/r/nAyGlY/1 --- src/Http/Traits/Filterable.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Http/Traits/Filterable.php b/src/Http/Traits/Filterable.php index 1bd1829..4fc20f6 100644 --- a/src/Http/Traits/Filterable.php +++ b/src/Http/Traits/Filterable.php @@ -41,7 +41,7 @@ trait Filterable */ protected function applyFilters(Request $request, Builder $query) { - $regex = "/((?'field'[a-z_]+)\s+(?'operator'eq|ne|gt|lt|ge|le)\s+(?'value'(?>'[\w\-:\s]+')|(?>[\w]+))(\s+(?'join'and|or))?)+/"; + $regex = "/((?'field'[a-z_]+)\s+(?'operator'eq|ne|gt|lt|ge|le)\s+(?'value'(?>'[\s\S]+?')|(?>[\w]+))(\s+(?'join'and|or))?)+/"; if (preg_match_all($regex, $request->query('$filter', ''), $filters) === false) return $query;