You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改preg_match验证规则:拦截MT但允许PMT,避免误匹配

解决正则误匹配PMT中MT的问题

原代码里的正则/(MT|GT)(\d+)/i会错误匹配"PMT"里的"MT"片段,导致合法的PMT内容被误拦截。要实现拦截独立的MT/GT+数字组合,但允许PMT+数字通过,只需给正则添加负向后瞻断言,限制MT/GT前面不能有英文字母。

修改后的正则说明

将原正则替换为:

/(?<!([A-Z]))(MT|GT)(\d+)/i

各部分作用:

  • (?<!([A-Z])):负向后瞻断言,确保MT/GT前面没有任何英文字母(i修饰符忽略大小写,对小写字母同样生效)
  • (MT|GT):匹配目标拦截字符串MT或GT
  • (\d+):匹配后续的一个或多个数字

修改后的完整代码

function wppbc_custom_input_validation($message, $field, $request_data, $form_location) {
  if ($field['field'] == 'Input' && $field['meta-name'] == 'input_field') {
    $field_data = $request_data[$field['meta-name']];
    // 添加负向后瞻断言,避免匹配PMT中的MT片段
    if (preg_match('/(?<!([A-Z]))(MT|GT)(\d+)/i', $field_data) === 1) {
      return 'Not allowed.';
    }
    if (preg_match('/[A-Z]+\d+/i', $field_data) === 0) {
      return 'Invalid number'; 
    }
  }
  return $message;
}

验证效果

  • 被拦截内容:MT123、gt456(MT/GT前面无字母,符合拦截规则)
  • 允许通过内容:PMT789(MT前面有字母P,不会触发拦截)、abcMT123(MT前面有字母,不会触发拦截)

内容的提问来源于stack exchange,提问作者Claschy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 13:25:32