【问题标题】:How to chech Bosnian-specific characters in RegEx?如何检查正则表达式中的波斯尼亚语特定字符?
【发布时间】:2013-04-12 22:05:36
【问题描述】:

我有这个正则表达式模式,它非常简单,它验证提供的字符串是否为“alpha”(大写和小写):

var pattern = /^[a-zA-Z]+$/gi;

当我触发pattern.test('Zlatan Omerovic') 时,它会返回true,但是如果我:

pattern.test('Zlatan Omerović');

它返回false,但我的验证失败。

在波斯尼亚语中,我们有这些特定的字符:

š đ č ć ž

大写:

Š Đ Č Ć Ž

是否可以使用 JavaScript 正则表达式验证这些字符(两种情况)?

【问题讨论】:

  • 是的,你试过什么?提示:只需在方括号之间添加。
  • @FabrícioMatté - 令人惊讶的是,你在问题中看到的 :)
  • 我的意思是,看起来您只是复制了一些验证字母字符的正则表达式,但没关系。如果您查看这些方括号的含义 - character class - 您就会知道如何修复此类正则表达式。
  • @FabrícioMatté:角色类a-z 很可能包含š 到波斯尼亚人。它不在 JavaScript 中,但从非英语的角度来看,这并没有使其不合逻辑。
  • @T.J.Crowder 我相信 JS 的字符类的范围是基于 ASCII 码的,不是吗?在这种情况下, a-z 仅表示字符 97-122(以及带有不区分大小写标志的 65-90)。或者这些是基于 UTF-8 的,不确定。

标签: javascript regex special-characters


【解决方案1】:

当然,您可以将这些字符添加到您匹配的字符列表中。此外,由于您正在进行不区分大小写的匹配(i 标志),因此您不需要大写字符。

var pattern = /^[a-zšđčćž ]+$/gi;

在这里提琴:http://jsfiddle.net/ryanbrill/KB74b/

这是另一种模式,它使用 unicode 表示,这可能会更好(例如,如果文件未使用正确的编码保存,则嵌入字符将不起作用)

var pattern = /^[a-z\u0161\u0111\u010D\u0107\u017E ]+$/gi;

http://jsfiddle.net/ryanbrill/KB74b/2/

【讨论】:

  • 缺少空格以匹配示例顺便说一句。
  • @FabrícioMatté 啊,没看到。修复了正则表达式
【解决方案2】:

a-zA-Z 就是这个意思,并且以英语为中心:abcdefghijklmnopqrstuvwxyz。遗憾的是,使用 JavaScript 的正则表达式,如果您想测试其他字母字符,您必须专门指定它们。 JavaScript 没有对语言环境敏感的“alpha”定义。要包含非英文字母字符,您必须故意包含它们。您可以直接执行此操作(例如,通过在正则表达式中包含 š),或使用 Unicode 转义序列(例如 \u0161)。如果所讨论的其他波斯尼亚字母字符具有连续范围,您也可以对它们使用- 表示法,但它必须与用英文定义的a-z 分开。

【讨论】:

  • 我以前见过一个定义特定语言字符范围的正则表达式库,不幸的是我不记得它的名字了。好吧,+1,因为你的答案解释得很好。
【解决方案3】:

为了在测试结果中包含我做的五个中的第一个(基于 S 的)符号:

var pattern = /^[a-zA-Z\u0160-\u0161]+$/g;

尝试以这种方式添加您需要的所有符号;)

【讨论】:

  • 虽然我很确定波斯尼亚网站上有很多完整的例子;)
猜你喜欢
  • 2012-01-13
  • 1970-01-01
  • 2015-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-17
相关资源
最近更新 更多