zx8*_*x81 14
重音字符:DIY字符范围减法
如果你的正则表达式引擎允许它(很多人会),这将有效:
(?i)^(?:(?![×Þß÷þø])[-'0-9a-zÀ-ÿ])+$
Run Code Online (Sandbox Code Playgroud)
请参阅演示(您可以添加要测试的字符).
说明
(?i)
设置不区分大小写的模式^
锚断言,我们是在字符串的开头(?:(?![×Þß÷þø])[-'0-9a-zÀ-ÿ])
匹配一个字符......(?![×Þß÷þø])
断言,char不是括号中的char之一[-'0-9a-zÀ-ÿ]
允许在宽重音范围内使用短划线,撇号,数字,字母和字符,我们需要从中减去+
场比赛是一次或多次$
锚断言,我们是在字符串的结束参考
Nig*_*der 14
你只需输入你的表达:
\p{L}\p{M}
Run Code Online (Sandbox Code Playgroud)
这在 Unicode 中将匹配:
小智 6
没有排除规则的版本:
\n\n^[-\'a-zA-Z\xc3\x80-\xc3\x96\xc3\x98-\xc3\xb6\xc3\xb8-\xc3\xbf]+$\n
Run Code Online (Sandbox Code Playgroud)\n\n解释
\n\n^
断言我们位于字符串的开头[...]
允许在较宽的重音范围内使用破折号、撇号、\n数字、字母和字符,+
一次或多次$
断言我们位于字符串的末尾参考
\n\n@NightCoder 的答案在 PHP 中完美运行:
\n \\p{L}\\p{M}\n
Run Code Online (Sandbox Code Playgroud)\n并且没有脆弱的白名单。请注意,要使其在 javascript 中工作,您需要添加 unicodeu
标志。在 javascript 中有一个工作示例很有用...
const text = `Cr\xc3\xaapes are \xc3\xb8h-so d\xc3\xa9class\xc3\xa9e`\n[ ...text.matchAll( /[-\'\xe2\x80\x99\\p{L}\\p{M}\\p{N}]+/giu ) ]\n
Run Code Online (Sandbox Code Playgroud)\n会返回类似...
\n[\n {\n "0": "Cr\xc3\xaapes",\n "index": 0\n },\n {\n "0": "are",\n "index": 7\n },\n {\n "0": "\xc3\xb8h-so",\n "index": 11\n },\n {\n "0": "d\xc3\xa9class\xc3\xa9e",\n "index": 17\n }\n]\n
Run Code Online (Sandbox Code Playgroud)\n这是在操场上...... https://regex101.com/r/ifgH4H/1/
\n还有关于这些正则表达式 unicode 类别的一些详细信息... https://javascript.info/regexp-unicode
\n