JavaScript 中的正则表达式修饰符 /u?

问题描述 投票:0回答:4

最近我为我的 PHP 代码创建了一个正则表达式,它只允许字母(包括特殊字符加空格),但现在我在将其(?)转换为 JavaScript 兼容的正则表达式时遇到问题,这里是:

 /^[\s\p{L}]+$/u
,问题是正则表达式模式末尾的
/u
修饰符,因为 JavaScript 不允许这样的标志。

我如何重写它,以便它也能在 JavaScript 中工作?

是否有只允许波兰语字符的内容:

Ł
Ą,
Ś
Ć
,...

php javascript regex unicode
4个回答
21
投票

/u
修饰符用于支持unicode。 ES2015 中的JavaScript 添加了对它的支持。

阅读 http://stackoverflow.com/questions/280712/javascript-unicode 了解有关 JavaScript 正则表达式中的 unicode 的更多信息。


波兰语字符:

Ą \u0104
Ć \u0106
Ę \u0118
Ł \u0141
Ń \u0143
Ó \u00D3
Ś \u015A
Ź \u0179
Ż \u017B
ą \u0105
ć \u0107
ę \u0119
ł \u0142
ń \u0144
ó \u00F3
ś \u015B
ź \u017A
ż \u017C

所有特殊波兰语字符:

[\u0104\u0106\u0118\u0141\u0143\u00D3\u015A\u0179\u017B\u0105\u0107\u0119\u0142\u0144\u00F3\u015B\u017A\u017C]

6
投票

JavaScript 没有任何 UTF-8 字符串的概念,因此您不太可能需要

/u
标志。 (您的字符串可能已经采用通常的 JavaScript 形式,每个“字符”一个 UTF-16 代码单元。)

更大的问题是 JavaScript 不支持

\p{L}
,也不支持任何等效的符号; JavaScript 正则表达式不知道 Unicode 字符属性。请参阅此 StackOverflow 问题的答案,了解一些近似方法。


编辑添加:如果您只需要支持波兰语字母,那么您可以写

/^[\sa-zA-ZĄĆĘŁŃÓŚŹŻąćęłńóśźż]+$/
a-z
A-Z
部分覆盖了ASCII字母,然后将其余字母单独列出。



0
投票

示例

提到:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/unicode#description

  • /u
    允许您在正则表达式中使用
    \u
    ,例如鉴于字符
    'a'
    的 ASCII 和 Unicode 点为 61,这与
    /u
    匹配:

    'a'.match(/\u{61}/u) !== null
    

    但是没有

    /u
    就不匹配:

    'a'.match(/\u{61}/) === null
    

    因为在这种情况下它会被解释为:

    • \u
      :不存在的字符类(例如,
      \s
      将是空格,但
      u
      没有)
    • {61}
      :重复61次

    所以它会匹配:

    'u'.repeat(61)match(/\u{61}/) !== null
    
    
© www.soinside.com 2019 - 2024. All rights reserved.