首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于捕获汉字的JavaScript正则表达式

用于捕获汉字的JavaScript正则表达式
EN

Stack Overflow用户
提问于 2011-09-08 15:57:59
回答 6查看 5.1K关注 0票数 5

我不能让这个javascript函数以我想要的方式工作...

//匹配包含汉字和/或假名字符的字符串

代码语言:javascript
复制
String.prototype.isKanjiKana = function(){
    return !!this.match(/^[\u4E00-\u9FAF|\u3040-\u3096|\u30A1-\u30FA|\uFF66-\uFF9D|\u31F0-\u31FF]+$/);
}

如果字符串由汉字和/或假名字符组成,则返回TRUE;如果存在字母表或其他字符,则返回FALSE。

我希望它返回,如果至少有1个汉字和/或假名字符存在,而不是如果它们都存在。

提前感谢您的帮助!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-09-08 16:10:27

代码语言:javascript
复制
String.prototype.isKanjiKana = function(){
    return !!this.match(/[\u4E00-\u9FAF\u3040-\u3096\u30A1-\u30FA\uFF66-\uFF9D\u31F0-\u31FF]/);
}

不要使用$^将其锚定在字符串的开头和结尾,+在这种情况下是无用的。

票数 2
EN

Stack Overflow用户

发布于 2011-09-09 01:06:44

正确的答案是不对范围进行硬编码。永远不要在你的代码中放入魔术数字!这是维护的噩梦。它很难读,很难写,很难调试,很难维护。你怎么知道你的数字是对的?当他们添加新的时会发生什么?不,不要使用幻数。请。

正确的答案是使用命名的Unicode脚本,它是每个Unicode代码点的基本方面:

代码语言:javascript
复制
[\p{Han}\p{Hiragana}\p{Katakana}]

这需要Javascript的XRegExp plugin

真正的问题是,Javascript正则表达式本身是太原始的而不支持Unicode属性--因此,不支持Unicode。15年前,这也许是一种可以接受的妥协,但今天,正如你自己所发现的那样,这是不可容忍的疏忽。

您还会遗漏一些在新的Script Extensions属性中指定为假名的Common代码点,但可能无关紧要。您可以将\p{Common}添加到上面的集合中。

票数 9
EN

Stack Overflow用户

发布于 2019-05-01 15:04:07

既然Unicode属性转义是ES (2018)规范的一部分,如果JS引擎支持此功能,则可以在本地使用以下正则表达式(扩展@tchrist的答案):

代码语言:javascript
复制
/[\p{Script_Extensions=Han}\p{Script_Extensions=Hiragana}\p{Script_Extensions=Katakana}]/u

如果要从匹配中排除标点符号:

代码语言:javascript
复制
/(?!\p{Punctuation})[\p{Script_Extensions=Han}\p{Script_Extensions=Hiragana}\p{Script_Extensions=Katakana}]/u
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7344871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档