Skip to content

Instantly share code, notes, and snippets.

@iso2022jp
Last active September 17, 2019 11:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save iso2022jp/749c27293fe3771f00fede15765d2e41 to your computer and use it in GitHub Desktop.
Save iso2022jp/749c27293fe3771f00fede15765d2e41 to your computer and use it in GitHub Desktop.
Make regex for date range (YYYY-MM-DD to YYYY-MM-DD)
const makeDateRangeRegexp = (from, to) => {
const indices = Array.from('01235689')
const unders = indices.map(i => {
const digit = from[i]
return digit > 0 ? from.slice(0, i) + `[0-${digit - 1}]` : null
})
const overs = indices.map(i => {
const digit = to[i]
return digit < 9 ? to.slice(0, i) + `[${+digit + 1}-9]` : null
})
const pattern = unders.concat(overs)
.filter(p => p)
.map(p => `(?!${p})`)
.join('')
.replace(/\[(\d)-\1]/g, '$1')
return new RegExp('^' + pattern)
}
@iso2022jp
Copy link
Author

(f, t) => new RegExp('^' + 
  '01235689'.split('').reduce((a, i) => a.concat(
    f[i] > 0 ? f.slice(0, i) + `[0-${f[i] - 1}]` : '',
    t[i] < 9 ? t.slice(0, i) + `[${+t[i] + 1}-9]` : ''
  ), [])
  .filter(p => p)
  .map(p => `(?!${p})`)
  .join('')
)

@iso2022jp
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment