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

新加坡手机号正则验证函数开发求助(附问题代码)

修复新加坡手机号正则校验的问题

我看到你在给Gravity Forms添加新加坡手机号格式校验时遇到了问题,主要是正则表达式的写法有误。咱们一步步来修正:

原代码的核心问题

你把每个正则分支都用独立的/包裹并重复添加了D修饰符,这不符合PHP正则的语法规范——整个正则应该只在首尾有一对/分隔符,修饰符也只需要声明一次。另外,国家码部分的正则可以大幅简化,不用重复写三次+65开头的分支。

修正后的完整代码

add_filter( 'gform_phone_formats', 'sg_phone_format' );
function sg_phone_format( $phone_formats ) {
  $phone_formats['sg'] = array(
    'label' => 'Singapore',
    'mask' => false,
    // 合并正则分支,简化国家码逻辑
    'regex' => '/^(?:[689]\d{7}|\+65[689]\d{7})$/D',
  );
  return $phone_formats;
}

正则表达式逻辑拆解

这个正则完全贴合你的需求:

  • ^:锁定字符串开头,避免匹配内容前有多余字符
  • (?:...):非捕获分组,用来把两个校验规则打包在一起
    • [689]\d{7}:匹配本地格式:以6/8/9开头,后跟7位数字(比如61234567)
    • |:逻辑或,允许匹配两个规则中的任意一种
    • \+65[689]\d{7}:匹配国际格式:以+65(新加坡国家码)开头,紧跟6/8/9,再跟7位数字(比如+6587654321)
  • $:锁定字符串结尾,避免匹配内容后有多余字符
  • /D修饰符:确保$只匹配字符串绝对末尾,不会误匹配换行符前的位置,彻底避免部分匹配的情况

修改后,不管用户输入本地格式还是带国家码的国际格式,都能正确完成校验了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 15:22:30