【问题标题】:RegEx for Unicode strings to check the string does not contain specific charactersRegEx 用于 Unicode 字符串检查字符串不包含特定字符
【发布时间】:2012-10-23 12:56:04
【问题描述】:

基本上,我需要检查一个 utf-16 字符串是否不包含这些字符 /:*?|+。 除此之外,它可以包含从英语到拉丁语的任何字符。

对于普通的 ASCII 字符串,我们会写一个像 ^[^\/:?|+]$ 这样的 RegEx 对于 UTF-16 格式的字符串,此表达式有何变化?

我们可以在 RegEx 中使用 ascii 字符来表示这个表达式吗? 或者我们应该有等效的 unicode 代码点来匹配任何字符?

【问题讨论】:

  • 如果你尝试会发生什么?您使用哪种语言? And do some reading here.
  • 什么编程语言? Unicode 的处理差异很大。不过,它应该只适用于大多数情况。
  • 我已经在 J​​avaScript 中尝试了上述表达式,并使用不同的自然语言 (en,jp, tw) 字符串进行了测试。似乎通过它们(不匹配)好的,并在出现任何这些特殊字符时阻止(匹配)。但想知道这是否是正确的方法。我需要这个表达式用于 JavScript、C++ 和 XML(xsd 验证)。棘手的部分是 xsd,无法指定 unicode 代码点(即 \u+002F 等),所以如果上面的 ascii 表达式有效,那就太好了。只是想确认我没有遗漏一些关于 utf-16 字符串应该如何被 RegExed 的细节。

标签: regex unicode utf-16


【解决方案1】:

由于您不想允许的所有特殊字符都是普通 ASCII 字符,请使用正则表达式模式

/^[^\/:*?<>|+]*$/

【讨论】:

  • 我知道你只是在重复提问者给出的模式,但值得指出的是,这会检查字符串 only 是否包含这些字符(并且还匹配空字符串)。这将检查字符串是否包含任何字符:/[\/:*?&lt;&gt;|+]/.
  • @dan1111 - 问题标题是“...检查字符串不包含特定字符”,所以我相信如果它不包含这些字符,它应该匹配。
  • 对不起,我的错误。我不知何故错过了对字符类的否定。
  • 谢谢。我只是想确认我们可以使用常规的 ascii 特殊字符,例如($、 等),就像 unicode 字符串一样。
  • @Vijay - 是的,你可以,但不要忘记,有时某些字符需要用 `` 转义。
猜你喜欢
  • 1970-01-01
  • 2010-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-08
  • 1970-01-01
相关资源
最近更新 更多