到登记区域

传递2个数字,获得匹配范围的Regex相容源字符串. 对278万多条试验断言进行了验证.
请考虑跟随这个项目的作者, 乔恩·斯林克特,并考虑主演该项目以显示你的:心:和支持.
安装
安装方式 无数字 :
$ npm install --save to-regex-range
这有什么用?
这个自由产生 source 要传递到的字符串 new RegExp() 用于匹配数字范围.
示例
const toRegexRange = require('to-regex-range');
const regex = new RegExp(toRegexRange('15', '95'));
将字符串还原,以便您在传递给 new RegExp() (如添加) ^ 或者说 $ 边框,定义旗帜,或合并其另一个字符串.
为什么用这个图书馆?
方便性
创建匹配数字的正则表达式会变得非常快地被欺骗地复杂.
例如,假设您需要验证 regex 来匹配部分用户代号,邮政编码,社会保障号码,税收代号等:
- 匹配的正则
1=>/1/(轻松多了) - 匹配的正则
1结束5=>/[1-5]/(不错... ) - 匹配的正则
1或者说5=>/(1|5)/(仍然轻松. ) - 匹配的正则
1结束50=>/([1-9]|[1-4][0-9]|50)/(呜-哦 - 匹配的正则
1结束55=>/([1-9]|[1-4][0-9]|5[0-5])/(没有证明,我可以做到这一点... ) - 匹配的正则
1结束555=>/([1-9]|[1-9][0-9]|[1-4][0-9]{2}|5[0-4][0-9]|55[0-5])/(可能不会... ) - 匹配的正则
0001结束5555=>/(0{3}[1-9]|0{2}[1-9][0-9]|0[1-9][0-9]{2}|[1-4][0-9]{3}|5[0-4][0-9]{2}|55[0-4][0-9]|555[0-5])/好吧,我明白了这一点
数字是精心构思的,但是它们也是非常基本的。 在现实世界中,你可能需要 生成一个正则的飞行验证.
学多点
如果你有兴趣学习更多 字符类 我个人一直发现 正则表达式。 info 相当有用.
重度测试
截止2019年4月07日,本馆开通运营 >1m 测试断言 对照生成的正则距离 提供野蛮力量 核实结果是否正确.
我的MacBook Pro 2.5 GHz Intel Core i7的测试以~280ms运行.
优化
生成的正则表达式被优化:
- 重复序列和字符类别使用限定词减少
- 足够聪明,可以使用
?当数字或范围可以是正数或负数时的条件 - 使用碎片缓存来避免多次处理相同的字符串
使用量
将此库添加到您的 Javascript 应用程序中, 代码如下行
const toRegexRange = require('to-regex-range');
主要导出是需要两个整数的函数: min 价值和 max 值(格式化为字符串或数字).
const source = toRegexRange('15', '95');
//=> 1[5-9]|[2-8][0-9]|9[0-5]
const regex = new RegExp(`^${source}$`);
console.log(regex.test('14')); //=> false
console.log(regex.test('50')); //=> true
console.log(regex.test('94')); //=> true
console.log(regex.test('96')); //=> false
选项
选项
类型数字 : boolean
聋人数字 : undefined
当存在一个以上 regex 条件时, 将返回的值围入括号中 。 在动态生成范围时有用.
console.log(toRegexRange('-10', '10'));
//=> -[1-9]|-?10|[0-9]
console.log(toRegexRange('-10', '10', { capture: true }));
//=> (-[1-9]|-?10|[0-9])
选项
类型数字 : boolean
聋人数字 : undefined
使用 regex 的快手 [0-9]数字 :
console.log(toRegexRange('0', '999999'));
//=> [0-9]|[1-9][0-9]{1,5}
console.log(toRegexRange('0', '999999', { shorthand: true }));
//=> \d|[1-9]\d{1,5}
选项.relaxZeros
类型数字 : boolean
默认数字 : true
当区域为零加值时,此选项可以放松对正0的匹配.
const source = toRegexRange('-0010', '0010');
const regex = new RegExp(`^${source}$`);
console.log(regex.test('-10')); //=> true
console.log(regex.test('-010')); //=> true
console.log(regex.test('-0010')); //=> true
console.log(regex.test('10')); //=> true
console.log(regex.test('010')); //=> true
console.log(regex.test('0010')); //=> true
何时 relaxZeros 错误, 匹配严格 :
const source = toRegexRange('-0010', '0010', { relaxZeros: false });
const regex = new RegExp(`^${source}$`);
console.log(regex.test('-10')); //=> false
console.log(regex.test('-010')); //=> false
console.log(regex.test('-0010')); //=> true
console.log(regex.test('10')); //=> false
console.log(regex.test('010')); //=> false
console.log(regex.test('0010')); //=> true
实例
| 范围 | 结果 | 编译时间 |
|---|---|---|
toRegexRange(-10, 10) | -[1-9]|-?10|[0-9] | 132μs( 132μs) |
toRegexRange(-100, -10) | -1[0-9]|-[2-9][0-9]|-100 | 50μs |
toRegexRange(-100, 100) | -[1-9]|-?[1-9][0-9]|-?100|[0-9] | 42 μs (42μs) (单位:千米) |
toRegexRange(001, 100) | 0{0,2}[1-9]|0?[1-9][0-9]|100 | 109微克 |
toRegexRange(001, 555) | 0{0,2}[1-9]|0?[1-9][0-9]|[1-4][0-9]{2}|5[0-4][0-9]|55[0-5] | 51 μs (单位:千米) |
toRegexRange(0010, 1000) | 0{0,2}1[0-9]|0{0,2}[2-9][0-9]|0?[1-9][0-9]{2}|1000 | 31 微秒( 31 微秒) |
toRegexRange(1, 50) | [1-9]|[1-4][0-9]|50 | 24 μs (24μs) (20μs) |
toRegexRange(1, 55) | [1-9]|[1-4][0-9]|5[0-5] | 23μs( 23μs) (23μs) (23μs) |
toRegexRange(1, 555) | [1-9]|[1-9][0-9]|[1-4][0-9]{2}|5[0-4][0-9]|55[0-5] | 30 μs (30μs) (30μs) |
toRegexRange(1, 5555) | [1-9]|[1-9][0-9]{1,2}|[1-4][0-9]{3}|5[0-4][0-9]{2}|55[0-4][0-9]|555[0-5] | 43 μs (单位:千米) |
toRegexRange(111, 555) | 11[1-9]|1[2-9][0-9]|[2-4][0-9]{2}|5[0-4][0-9]|55[0-5] | 38 μs (38μs) (38μs) (38μs) (38μs) |
toRegexRange(29, 51) | 29|[34][0-9]|5[01] | 24 μs (24μs) (20μs) |
toRegexRange(31, 877) | 3[1-9]|[4-9][0-9]|[1-7][0-9]{2}|8[0-6][0-9]|87[0-7] | 32 μs (单位:千兆克) |
toRegexRange(5, 5) | 5 | 8μs (8μs) (8μs) (8μs) |
toRegexRange(5, 6) | 5|6 | 11 μs (11μs) (11μs) |
toRegexRange(1, 2) | 1|2 | 6 微秒( 6 微秒) |
toRegexRange(1, 5) | [1-5] | 15μs (15μs) (15μs) |
toRegexRange(1, 10) | [1-9]|10 | 22 微米( 22 微米) |
toRegexRange(1, 100) | [1-9]|[1-9][0-9]|100 | 25微克 |
toRegexRange(1, 1000) | [1-9]|[1-9][0-9]{1,2}|1000 | 31 微秒( 31 微秒) |
toRegexRange(1, 10000) | [1-9]|[1-9][0-9]{1,3}|10000 | 34μs (34μs) (34μs) (34μs) |
toRegexRange(1, 100000) | [1-9]|[1-9][0-9]{1,4}|100000 | 36微克 |
toRegexRange(1, 1000000) | [1-9]|[1-9][0-9]{1,5}|1000000 | 42 μs (42μs) (单位:千米) |
toRegexRange(1, 10000000) | [1-9]|[1-9][0-9]{1,6}|10000000 | 42 μs (42μs) (单位:千米) |
抬头!
辩论顺序
当 min 大于 max,值将被翻转以创建有效区域:
toRegexRange('51', '29');
实际翻转为:
toRegexRange('29', '51');
//=> 29|[3-4][0-9]|5[0-1]
步骤/递增
此库不支持步骤( increments). 欢迎增加支持.
历史
v2.0.0 - 2017-04-21 (英语)
新特点
添加零铺设的支持 !
v1.0.0 (韩语)
优化
重复范围现在使用限定词进行分组。 rocessing时间大致相同,但生成的regex要小得多,这应导致更快的匹配.
归属
被蟒蛇图书馆所启发 区域正则。 。 。 .
关于
捐款
拉出请求和星星总是受欢迎的. 对于错误和特性请求, 请创建一个问题。 。 。 .
运行测试
运行和审查单元测试是熟悉图书馆及其API的好办法。 您可以使用以下命令安装依赖性并运行测试:
$ npm install && npm test
大楼文件
(此工程的 readme.md 由 动词请不要直接编辑读取器。 读取器的任何改动必须在 动词 md 读取我的模板。 )
要生成读取, 请运行以下命令 :
$ npm install -g verbose/verb#dev verb-generate-readme && verb
相关项目
您可能也对这些项目感兴趣:
- 扩展范围:快速地,相撞的扩展范围. 扩展数字或字母、大写或小写的范围。 用过.. 更多 | 主页
- 填充范围: 填入一系列数字或字母,可选通过递增或
step对.. 更多 | 主页 - 微比对: 为javascript/node.js进行格洛布匹配. 一个倒置替换和更快的替代微型比赛和多场比赛 主页
- 重复元素:通过重复给定值n次来创建数组. | 主页
- 重复字符串:重复给定的字符串n次. 重复字符串的快速执行 。 @ info: whatsthis 主页
贡献者
| 提交 | 贡献者 |
| -- -- -- -- -- -- --
| 63 | 扬施林克特 |
| 3 | 鸽子 |
|2| 现实 |
作者
乔恩·斯林克特
请考虑支持我在帕特里昂,或 启动您的 Patreon 页面来啊!
许可证
版权所有: 2019, 乔恩·斯林克特。 。 。 . 释放 MIT 许可证。 。 。 .
此文件由 动词基因读取器,v0.8.0,于2019年4月07日查阅.