diff --git a/lib/util/package-rules/current-version.spec.ts b/lib/util/package-rules/current-version.spec.ts
index 929e4db3453ecbe882a1627659a34220c32b5d39..077358af3b9454d9a24ebdaf62443ee3d4d302d8 100644
--- a/lib/util/package-rules/current-version.spec.ts
+++ b/lib/util/package-rules/current-version.spec.ts
@@ -39,5 +39,46 @@ describe('util/package-rules/current-version', () => {
       );
       expect(result).toBeFalse();
     });
+
+    it('return false for regex version non match', () => {
+      const result = matcher.matches(
+        {
+          versioning: 'ruby',
+          currentValue: '"~> 1.1.0"',
+          lockedVersion: '1.1.4',
+        },
+        {
+          matchCurrentVersion: '/^v?[~ -]?0/',
+        }
+      );
+      expect(result).toBeFalse();
+    });
+
+    it('return true for regex version match', () => {
+      const result = matcher.matches(
+        {
+          versioning: 'ruby',
+          currentValue: '"~> 0.1.0"',
+          lockedVersion: '0.1.0',
+        },
+        {
+          matchCurrentVersion: '/^v?[~ -]?0/',
+        }
+      );
+      expect(result).toBeTrue();
+    });
+
+    it('return false for regex value match', () => {
+      const result = matcher.matches(
+        {
+          versioning: 'ruby',
+          currentValue: '"~> 0.1.0"',
+        },
+        {
+          matchCurrentVersion: '/^v?[~ -]?0/',
+        }
+      );
+      expect(result).toBeFalse();
+    });
   });
 });
diff --git a/lib/util/package-rules/current-version.ts b/lib/util/package-rules/current-version.ts
index 0fb65ad8da61220053dd171672a737441462fd48..d93cb11e667f9793ec99e6602f4963ec4f32f38d 100644
--- a/lib/util/package-rules/current-version.ts
+++ b/lib/util/package-rules/current-version.ts
@@ -18,12 +18,8 @@ export class CurrentVersionMatcher extends Matcher {
     if (is.undefined(matchCurrentVersion)) {
       return null;
     }
-
-    if (is.nullOrUndefined(currentValue)) {
-      return false;
-    }
-
-    const isUnconstrainedValue = !!lockedVersion;
+    const isUnconstrainedValue =
+      !!lockedVersion && is.nullOrUndefined(currentValue);
     const version = allVersioning.get(versioning);
     const matchCurrentVersionStr = matchCurrentVersion.toString();
     const matchCurrentVersionPred = configRegexPredicate(
@@ -31,13 +27,20 @@ export class CurrentVersionMatcher extends Matcher {
     );
 
     if (matchCurrentVersionPred) {
-      return !(!isUnconstrainedValue && !matchCurrentVersionPred(currentValue));
+      const compareVersion = lockedVersion ?? currentVersion ?? currentValue;
+      return (
+        !is.nullOrUndefined(compareVersion) &&
+        matchCurrentVersionPred(compareVersion)
+      );
     }
     if (version.isVersion(matchCurrentVersionStr)) {
       try {
         return (
           isUnconstrainedValue ||
-          version.matches(matchCurrentVersionStr, currentValue)
+          !!(
+            currentValue &&
+            version.matches(matchCurrentVersionStr, currentValue)
+          )
         );
       } catch (err) {
         return false;
@@ -47,7 +50,7 @@ export class CurrentVersionMatcher extends Matcher {
     const compareVersion = version.isVersion(currentValue)
       ? currentValue // it's a version so we can match against it
       : lockedVersion ?? currentVersion; // need to match against this currentVersion, if available
-    if (is.undefined(compareVersion)) {
+    if (is.nullOrUndefined(compareVersion)) {
       return false;
     }
     if (version.isVersion(compareVersion)) {