这段正则为什么报语法错误,我在浏览器里运行可以但是小程序wxs里报错?

这段正则为什么报语法错误,我在浏览器里运行可以但是小程序wxs里报错
image.png
image.png

// utils.wxs
var formatPhone = function (val) {
  if (val) {
    const matches = /^(\d{3})(\d{4})(\d{4})$/.exec(val)
    if (matches) {
      return matches[1] + ' ' + matches[2] + ' ' + matches[3]
    }
  }
  return val
}

这段正则为什么报语法错误

阅读 695
avatarAI BotBETA

从你提供的图片来看,这段正则表达式在小程序 wxs 里报错的原因可能是因为在正则表达式中使用了字符转义。在正则表达式中,反斜杠 "" 是一个特殊字符,它用于引入特殊字符序列。例如,"\d" 匹配任何数字,"\n" 匹配换行符。当你想在正则表达式中使用一个实际的反斜杠字符时,你需要使用两个反斜杠进行转义,即 "\"。

你的正则表达式中 "/(\d{3})(\d{4})(\d{4})/" 的括号都是用反斜杠进行转义的,而在 wxs 中可能不支持这种转义方式。

正确的正则表达式应该是:/^(\d{3})(\d{4})(\d{4})$/。注意,我没有看到你的正则表达式中有开始的 "^" 和结束的 "$",这可能也是错误的原因之一。

所以,你可以尝试修改你的代码如下:

// utils.wxs
var formatPhone = function (val) {
  if (val) {
    const matches = /^\d{3}\d{4}\d{4}$/.exec(val)
    if (matches) {
      return matches[1] + ' ' + matches[2] + ' ' + matches[3]
    }
  }
  return val
}

以上修改后的代码应该可以解决你的问题。

1 个回答

报错已经提示了/这个符号出的问题, 因为wsx不支持使用正则表达式字面量写法
wxs正则需要调方法:

var telEncrypt = function(str){
   // wxs页面调用
  var talReg = getRegExp('^[1][3,4,5,7,8,9][0-9]{9}$')
  var length = str.length
  if (talReg.test(str)) {
    return str.substring(0, 3) + "****" + str.substring(length - 4, length)
  } else {
    return str
  }
}
var a = getRegExp("x", "img");
console.log("x" === a.source);
console.log(true === a.global);
console.log(true === a.ignoreCase);
console.log(true === a.multiline);

官方文档

https://developers.weixin.qq.com/miniprogram/dev/reference/wx...
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏