diff --git a/src/ExpressionLanguage/ExpressionExtension.php b/src/ExpressionLanguage/ExpressionExtension.php
index 4eb5585605975b32d82282fa1933907fc101f219..a6ee1b9fc7fd20b2b0acbb8eb93e022b8a654b18 100644
--- a/src/ExpressionLanguage/ExpressionExtension.php
+++ b/src/ExpressionLanguage/ExpressionExtension.php
@@ -139,4 +139,9 @@ class ExpressionExtension
 
         return $filteredResult;
     }
+
+    public static function isNullOrEmpty($value)
+    {
+        return $value === null || $value === '';
+    }
 }
diff --git a/tests/ExpressionLanguageTest.php b/tests/ExpressionLanguageTest.php
index ef09df286b6dd20ba198d3a83ce1e4714a74af2a..b627155ee1a61468ff965ef9cfa249dd0289a547 100644
--- a/tests/ExpressionLanguageTest.php
+++ b/tests/ExpressionLanguageTest.php
@@ -108,6 +108,9 @@ class ExpressionLanguageTest extends TestCase
         $this->assertSame('foo', $lang->evaluate('substr("foobar", 0, 3)'));
         $this->assertSame(1, $lang->evaluate('strpos("foobar", "oo")'));
         $this->assertSame(6, $lang->evaluate('strlen("foobar")'));
+        $this->assertFalse($lang->evaluate('isNullOrEmpty("foobar")'));
+        $this->assertTrue($lang->evaluate('isNullOrEmpty(null)'));
+        $this->assertTrue($lang->evaluate('isNullOrEmpty("")'));
 
         $this->assertTrue($lang->evaluate('relay.str_starts_with("foo", "fo")'));
         $this->assertFalse($lang->evaluate('relay.str_starts_with("foo", "xo")'));
@@ -116,5 +119,8 @@ class ExpressionLanguageTest extends TestCase
         $this->assertSame('foo', $lang->evaluate('relay.substr("foobar", 0, 3)'));
         $this->assertSame(1, $lang->evaluate('relay.strpos("foobar", "oo")'));
         $this->assertSame(6, $lang->evaluate('relay.strlen("foobar")'));
+        $this->assertFalse($lang->evaluate('relay.isNullOrEmpty("foobar")'));
+        $this->assertTrue($lang->evaluate('relay.isNullOrEmpty(null)'));
+        $this->assertTrue($lang->evaluate('relay.isNullOrEmpty("")'));
     }
 }