regular-tester.vue 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <template>
  2. <a-modal width="90%" height="90%" v-model:visible="visible" title="正则测试" :footer="false" @cancel="handleCancel">
  3. <a-row class="wrapper">
  4. <a-col :span="24">
  5. <a-form ref="formRef" class="form" :label-col-props="{ span: 2 }" :wrapper-col-props="{ span: 21 }">
  6. <a-form-item label="测试文本" placeholder="在此输入待匹配文本" row-class="keep-margin">
  7. <a-textarea class="textarea" v-model="content" auto-size />
  8. <template #extra>
  9. </template>
  10. </a-form-item>
  11. <a-form-item label="淘口令正则" placeholder="需要匹配的正则表达式,一行一个" row-class="keep-margin">
  12. <a-textarea class="textarea" v-model="pattern" auto-size />
  13. <template #extra>
  14. <a-alert type="success" v-if="testResult === true">正则匹配</a-alert>
  15. <a-alert type="error" v-else-if="testResult === false">正则不匹配</a-alert>
  16. <a-alert type="error" v-else-if="testResult instanceof Error">发生错误:{{ testResult.message
  17. }}</a-alert>
  18. </template>
  19. </a-form-item>
  20. <a-form-item label="淘口令排除正则" placeholder="需要匹配的正则表达式,一行一个" row-class="keep-margin">
  21. <a-textarea class="textarea" v-model="pattern2" auto-size />
  22. <template #extra>
  23. <a-alert type="success" v-if="testResult2 === true">正则匹配</a-alert>
  24. <a-alert type="error" v-else-if="testResult2 === false">正则不匹配</a-alert>
  25. <a-alert type="error" v-else-if="testResult2 instanceof Error">
  26. 发生错误:{{ testResult2.message }}</a-alert>
  27. </template>
  28. </a-form-item>
  29. <a-form-item label="混合口令正则" placeholder="需要匹配的正则表达式,一行一个" row-class="keep-margin">
  30. <a-textarea class="textarea" v-model="pattern3" auto-size />
  31. <template #extra>
  32. <a-alert type="success" v-if="testResult3 === true">正则匹配</a-alert>
  33. <a-alert type="error" v-else-if="testResult3 === false">正则不匹配</a-alert>
  34. <a-alert type="error" v-else-if="testResult3 instanceof Error">
  35. 发生错误:{{ testResult3.message }}</a-alert>
  36. </template>
  37. </a-form-item>
  38. <a-form-item>
  39. <a-space>
  40. <a-button type="primary" @click="handleTester">测试</a-button>
  41. <a-button type="secondary" @click="handleCancel">取消</a-button>
  42. </a-space>
  43. </a-form-item>
  44. </a-form>
  45. </a-col>
  46. </a-row>
  47. </a-modal>
  48. </template>
  49. <script lang="ts" setup>
  50. import { defineEmits, ref } from 'vue';
  51. import { Message } from '@arco-design/web-vue';
  52. import {
  53. TkPoolParams,
  54. queryTkPool,
  55. TkPoolRecord,
  56. } from '@/api/taobao';
  57. const content = ref<string>('');
  58. const pattern = defineModel<string>('pattern', { default: '', required: true })
  59. const pattern2 = defineModel<string>('pattern2', { default: '', required: true })
  60. const pattern3 = defineModel<string>('pattern3', { default: '', required: true })
  61. const visible = defineModel<boolean>('visible', { default: false, required: true })
  62. const testResult = ref<boolean | undefined | Error>(undefined)
  63. const testResult2 = ref<boolean | undefined | Error>(undefined)
  64. const testResult3 = ref<boolean | undefined | Error>(undefined)
  65. const testPatterns = (text: string, patterns: string): boolean | Error => {
  66. try {
  67. const patternArray = patterns.split('\n').filter(p => p.trim() !== '');
  68. const regexes = patternArray.map(p => new RegExp(p, 'g'));
  69. return regexes.some(regex => regex.test(text));
  70. } catch (error: any) {
  71. const msg = (error as Error).message
  72. console.error("正则表达式无效:", msg)
  73. return error as Error
  74. }
  75. };
  76. const handleTester = () => {
  77. console.log('test');
  78. const msg = 'test'
  79. testResult.value = testPatterns(content.value, pattern.value)
  80. testResult2.value = testPatterns(content.value, pattern2.value)
  81. testResult3.value = testPatterns(content.value, pattern3.value)
  82. };
  83. const handleCancel = () => {
  84. testResult.value = undefined
  85. testResult2.value = undefined
  86. testResult3.value = undefined
  87. visible.value = false;
  88. }
  89. testResult.value = undefined
  90. testResult2.value = undefined
  91. testResult3.value = undefined
  92. </script>
  93. <style scoped lang="less">
  94. .container {
  95. padding: 0 20px 20px 20px;
  96. }
  97. .wrapper {
  98. padding: 20px 0 0 20px;
  99. min-height: 580px;
  100. background-color: var(--color-bg-2);
  101. border-radius: 4px;
  102. }
  103. :deep(.section-title) {
  104. margin-top: 0;
  105. margin-bottom: 16px;
  106. font-size: 14px;
  107. }
  108. .form {
  109. margin: 0 auto;
  110. }
  111. .form .textarea {
  112. height: 100%;
  113. min-height: 200px;
  114. }
  115. </style>