如何根据提供的正则表达式,生存符合该表达式的字符串??

具体场景是这样的:

我们的网站上有一个注册的页面,上面有一个表单,表单里面有20多个需要填写的input框。

每次开发或者开发完毕之后需要测试是否出现异常。

但是需要填写的字段确实太多了,每次点击注册按钮之前都要花个2,3分钟来填写这些数据。

于是想能否编写一个浏览器插件来实现一键填充表单数据。

但是测试的数据会有一定规则的,比如 email输入框要求 \gz[p|v|e]\d{1,5}@xxxxxx.com\ 这种格式.

所以希望编写一个根据提供的正则表达式来生成符合条件的字符串,但是目前没有什么思路。


如果只是针对这一个页面的一个表单来说,因为我知道这个字段规则,不需要实现这个函数也能搞。
我想如果有可能,应该可以针对该站的所有form ,再进一步,针对所有网站的所有表单,那么这个函数就很有必要了。

阅读 3.4k
3 个回答

可以试试我的这个由正则表达式反解析成字符串的库,除了不支持前瞻后顾等这种跟匹配比较相关的语法外,其它的都严格按照正则表达式语法解析,并且支持命名捕获。github地址:reregexp。下面给个你上面示例的代码:

  1. 页面引入代码:(实际用的时候下载到你本地,会在window上挂载一个全局的ReRegExp构造函数)
    <script src="https://cdn.jsdelivr.net/gh/suchjs/reregexp@master/dist/reregexp.min.js"></script>
  2. 调用方式:
    <script>
    var re = new ReRegexp('/gz[pve]\\d{1,5}@[a-z0-9]{6}\\.com/');
    console.log(re.build());//每次build()随机生成一次符合匹配的字符串
    </script>

当然你也可以试试其它类似的库,比如randexp.js【库比较稳定,但已许久不更新,不支持命名组等新功能】等,基本都能满足你的需求:)

这个需要具体讨论吧
你是想提供测试用字符串?如果用于测试,还需要构造不符合的,这样测试用例才是完整的。
普遍来说,就是展开表达式,用实际符合各个元素的值代替元素来构造,并据表达式情况看是否前后再补充字符。


你的想法,我觉得有问题:
你其实还是想测试的是开发出来的网页,这个网页中含有很多表单需要填,对于这样的测试,其实你还是需要在测试用例中标准化一些数据,这个是可以预先储存的,然后采用可以自定义填充表单的测试工具(前端测试工具),模拟人的操作去自定义的填充这些表单(一般要求表单有确认的id或者位置等等信息,才能填充),而不仅仅是生成表单字符串的问题。

这样的前端自动化测试工具是有这样的功能的,甚至你可以多准备几个表单项内容,测试不同的情况。

这些表单内容是需要写入测试脚本中的。

此外,对于表单的验证,并不一定是在客户端,且验证方法不一定仅仅限于规制式,所以在客户端、或者客户端测试中实现根据规制式生成合格的字符串功能是没有必要的,此外测试一定需要失败测试的。

我的理解是每个用户想填的数据是不一样的,但是每个人要填的数据的校验规则肯定是固定的,无非就是每个测试人员想用自己的数据来测试,但是又不想从头到尾的输入,那么也不需要用正则,每个用户都保存一份自己想用的数据,每次都自动填充到表单里就好了,这样的话实现方案有几种:
1.你说的用chrome插件,只不过把根据正则自动生成改成每个人员自己写死存到chrome插件里,就相当于这个插件提供一个配置界面,用户可以手动更改需要自动填充到表单里的数据
2.把这些数据存到localStorage或者cookie里去,页面进来的时候在测试环境可以默认先从cookie或者localstorage里取。取不到就为空,但是这样的话会需要改动代码的逻辑。加了一些不是处理业务需求的代码

个人理解

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题