Browse Source

fix: the stringToRegexp should not replace "%" and "_" symbols as SQL-like wildcard

e22m4u 1 month ago
parent
commit
987d4246d6
3 changed files with 12 additions and 27 deletions
  1. 1 10
      dist/cjs/index.cjs
  2. 1 10
      src/utils/string-to-regexp.js
  3. 10 7
      src/utils/string-to-regexp.spec.js

+ 1 - 10
dist/cjs/index.cjs

@@ -330,16 +330,7 @@ function stringToRegexp(pattern, flags = void 0) {
   if (pattern instanceof RegExp) {
   if (pattern instanceof RegExp) {
     return new RegExp(pattern, flags);
     return new RegExp(pattern, flags);
   }
   }
-  let regex = "";
-  for (let i = 0, n = pattern.length; i < n; i++) {
-    const char = pattern.charAt(i);
-    if (char === "%") {
-      regex += ".*";
-    } else {
-      regex += char;
-    }
-  }
-  return new RegExp(regex, flags);
+  return new RegExp(pattern, flags);
 }
 }
 var init_string_to_regexp = __esm({
 var init_string_to_regexp = __esm({
   "src/utils/string-to-regexp.js"() {
   "src/utils/string-to-regexp.js"() {

+ 1 - 10
src/utils/string-to-regexp.js

@@ -9,14 +9,5 @@ export function stringToRegexp(pattern, flags = undefined) {
   if (pattern instanceof RegExp) {
   if (pattern instanceof RegExp) {
     return new RegExp(pattern, flags);
     return new RegExp(pattern, flags);
   }
   }
-  let regex = '';
-  for (let i = 0, n = pattern.length; i < n; i++) {
-    const char = pattern.charAt(i);
-    if (char === '%') {
-      regex += '.*';
-    } else {
-      regex += char;
-    }
-  }
-  return new RegExp(regex, flags);
+  return new RegExp(pattern, flags);
 }
 }

+ 10 - 7
src/utils/string-to-regexp.spec.js

@@ -2,34 +2,37 @@ import {expect} from 'chai';
 import {stringToRegexp} from './string-to-regexp.js';
 import {stringToRegexp} from './string-to-regexp.js';
 
 
 describe('stringToRegexp', function () {
 describe('stringToRegexp', function () {
-  it('returns RegExp from a given string', function () {
+  it('should return RegExp from a given string', function () {
     expect(stringToRegexp('value').test('value')).to.be.true;
     expect(stringToRegexp('value').test('value')).to.be.true;
     expect(stringToRegexp('val.+').test('value')).to.be.true;
     expect(stringToRegexp('val.+').test('value')).to.be.true;
-    expect(stringToRegexp('%alu%').test('value')).to.be.true;
     expect(stringToRegexp('val*').test('value')).to.be.true;
     expect(stringToRegexp('val*').test('value')).to.be.true;
   });
   });
 
 
-  it('uses case-sensitive mode by default', function () {
+  it('should uses case-sensitive mode by default', function () {
     expect(stringToRegexp('value').test('VALUE')).to.be.false;
     expect(stringToRegexp('value').test('VALUE')).to.be.false;
     expect(stringToRegexp('val.+').test('VALUE')).to.be.false;
     expect(stringToRegexp('val.+').test('VALUE')).to.be.false;
     expect(stringToRegexp('%alu%').test('VALUE')).to.be.false;
     expect(stringToRegexp('%alu%').test('VALUE')).to.be.false;
     expect(stringToRegexp('val*').test('VALUE')).to.be.false;
     expect(stringToRegexp('val*').test('VALUE')).to.be.false;
   });
   });
 
 
-  it('uses given flags in a new RegExp', function () {
+  it('should uses given flags in a new RegExp', function () {
     expect(stringToRegexp('value', 'i').test('VALUE')).to.be.true;
     expect(stringToRegexp('value', 'i').test('VALUE')).to.be.true;
     expect(stringToRegexp('val.+', 'i').test('VALUE')).to.be.true;
     expect(stringToRegexp('val.+', 'i').test('VALUE')).to.be.true;
-    expect(stringToRegexp('%alu%', 'i').test('VALUE')).to.be.true;
     expect(stringToRegexp('val*', 'i').test('VALUE')).to.be.true;
     expect(stringToRegexp('val*', 'i').test('VALUE')).to.be.true;
   });
   });
 
 
-  it('returns RegExp from a given RegExp', function () {
+  it('should return RegExp from a given RegExp', function () {
     const regExp = new RegExp('value');
     const regExp = new RegExp('value');
     expect(stringToRegexp(regExp).test('value')).to.be.true;
     expect(stringToRegexp(regExp).test('value')).to.be.true;
   });
   });
 
 
-  it('overrides flags of a given RegExp', function () {
+  it('should overrides flags of a given RegExp', function () {
     const regExp = new RegExp('value');
     const regExp = new RegExp('value');
     expect(stringToRegexp(regExp, 'i').test('VALUE')).to.be.true;
     expect(stringToRegexp(regExp, 'i').test('VALUE')).to.be.true;
   });
   });
+
+  it('should not replace "%" and "_" symbols as SQL-like wildcard', function () {
+    const res = stringToRegexp('%alu_');
+    expect(res).to.be.eql(/%alu_/);
+  });
 });
 });