最近我创建了一个正则表达式,用于我的PHP代码,它只允许字母(包括特殊字符和空格),但现在我遇到了将其转换为JavaScript兼容的正则表达式时出现的问题,这是它的代码:/^[\s\p{L}]+$/u
,问题在于正则表达式模式末尾的/u
修饰符,因为JavaScript不允许使用这样的标记。
我该如何重写它,以便在JavaScript中也能够工作?
是否有一些方法只允许波兰字符:Ł
, Ą,
Ś
, Ć
...
最近我创建了一个正则表达式,用于我的PHP代码,它只允许字母(包括特殊字符和空格),但现在我遇到了将其转换为JavaScript兼容的正则表达式时出现的问题,这是它的代码:/^[\s\p{L}]+$/u
,问题在于正则表达式模式末尾的/u
修饰符,因为JavaScript不允许使用这样的标记。
我该如何重写它,以便在JavaScript中也能够工作?
是否有一些方法只允许波兰字符:Ł
, Ą,
Ś
, Ć
...
/u
修饰符支持Unicode。在ES2015中添加了对其的支持。
阅读https://dev59.com/AnVC5IYBdhLWcg3weBE-以了解有关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]
preg
函数基于PCRE,当在正则表达式后附加/u
选项时,支持Unicode。 - Ωmega[\u0000-\u007F]
=基本拉丁文;[\u0080-\u00FF]
=拉丁1补充;[\u0100-\u017F]
=拉丁扩展-A;[\u0180-\u024F]
=拉丁扩展-B;...这些范围一起得到[\u0000-\u024F]
以包括所有拉丁字符 :) - Ωmega[\u0041-\u005A\u0061-\u007A\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02B8]
但它看起来肯定不太整洁。 - Liggliluff/u
标志。(您的字符串可能已经以通常的JavaScript形式存在,即每个“字符”一个UTF-16代码单元。)\p{L}
或任何等效符号;JavaScript正则表达式不了解Unicode字符属性。请参见这个StackOverflow问题的答案,了解一些近似方法。
/^[\sa-zA-ZĄĆĘŁŃÓŚŹŻąćęłńóśźż]+$/
。 a-z
和A-Z
部分涵盖ASCII字母,然后逐个列出剩余的字母。Ł
,Ą
,Ś
,Ć
,Ę
? - Scott\u0161
。例如,这将仅允许可打印的ASCII和Ć:
var newtxt = txt.replace(/[^\u0107\u0020-\u007e]/g, '')
。
您的字符的Unicode代码可以在此处找到:http://www.fileformat.info/info/unicode/char/107/index.htm - DamirR/\u0107/
等同于/Ć/
;你为什么要选择前者呢? - ruakh/Ć/
正常工作,你必须将js文件保存为UTF-8格式。有时,其他人可能会使用、更改、保存你的代码,并且他们可能会使用其他编码(例如iso-8859-1)。因此,/Ć/
将无法正确保存,脚本也将无法正常工作。如果你使用/\u0107/
,这种错误就可以避免。 - DamirR