Javascript regexp创建错误

Javascript regexp创建错误,javascript,regex,Javascript,Regex,我有以下JavaScript代码: aw_check_custom_validation['my-phone'] = /^\+[0-9]{1,3}(\s[0-9]{1,6}\s|\([0-9]{1,6}\)|[0-9]{1,6})[0-9\s]{5,8}$/u; 我收到以下错误: Uncaught SyntaxError: Invalid flags supplied to RegExp constructor 'u' 为什么/u标志会导致此错误?嗯,/u标志是特定于PHP的,支持Unico

我有以下JavaScript代码:

aw_check_custom_validation['my-phone'] = /^\+[0-9]{1,3}(\s[0-9]{1,6}\s|\([0-9]{1,6}\)|[0-9]{1,6})[0-9\s]{5,8}$/u;
我收到以下错误:

Uncaught SyntaxError: Invalid flags supplied to RegExp constructor 'u'

为什么/u标志会导致此错误?

嗯,
/u
标志是特定于PHP的,支持Unicode(您的正则表达式无论如何都不会使用Unicode,除非您计划将Unicode空白字符与
\s
速记匹配)。为什么不干脆把它拿走呢


作为参考,
/g
(全局匹配)、
/i
(不区分大小写的匹配)和
/m
(多行,即允许
^
$
在每行的开始和结束处匹配)修饰符。

这是一条非常隐晦的消息,表示传递给正则表达式构造函数的
u
标志无效。JavaScript支持

  • g
    (全局匹配)
  • m
    (“将开头和结尾字符(^和$)视为在多行上工作”)
  • i
    (不区分大小写匹配)

因为它不是一个有效的JavaScript正则表达式标志;有效的标志是
g
(全局)、
i
(忽略大小写)和
m
(多行)。

不确定是否是您的大小写,但我在Node.js中遇到了类似的问题:

SyntaxError:提供给RegExp构造函数“u”的标志无效

我只是通过更新Ubuntu服务器中的Node.js来修复它。 以前的版本是:

$ node -v
v5.1.1
然后我做了:

$ curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
   ... long output
$ sudo apt-get install -y nodejs
   ... shorter output
$ node -v
v6.7.0

没有其他问题。

您希望/u做什么?因为唯一有效的标志是
i
m
g
:谢谢解释!我理解我误解了regexp的标志:)目前(经过几年的等待之后,
u
标志可用于regexp构造函数(并在文档中描述):在支持ECMAScript 2015(Chrome v.50、Firefox/Gecko v.46)的浏览器中。@32bitkid:可能,但JavaScript正则表达式严重缺乏Unicode支持。除了单个代码点(
\u1234
)之外,没有多少<例如,代码>\w仅匹配ASCII字符;目前不支持Unicode脚本/块/属性(
\p{L}
等)…@TimPietzcker如果我在
预览中使用
/
,该怎么办而不是
^
$
/m
对它不起作用。你能帮我吗?@TimPietzcker对不起,你能回答我吗?@Flith:对不起,我看不出这个问题有什么联系。如果您想问一个新问题,请使用“提问”按钮并包含更多信息。注释不适用于此。ECMAScript 2015中添加了对
u
标志的JavaScript支持,因此RegExp构造函数可以使用
u
标志:。支持
u
的最早浏览器版本:Chrome v.50、Firefox/Gecko v.46。