我不能让这个javascript函数以我想要的方式工作...
//匹配包含汉字和/或假名字符的字符串
String.prototype.isKanjiKana = function(){
return !!this.match(/^[\u4E00-\u9FAF|\u3040-\u3096|\u30A1-\u30FA|\uFF66-\uFF9D|\u31F0-\u31FF]+$/);
}如果字符串由汉字和/或假名字符组成,则返回TRUE;如果存在字母表或其他字符,则返回FALSE。
我希望它返回,如果至少有1个汉字和/或假名字符存在,而不是如果它们都存在。
提前感谢您的帮助!
发布于 2011-09-08 16:10:27
String.prototype.isKanjiKana = function(){
return !!this.match(/[\u4E00-\u9FAF\u3040-\u3096\u30A1-\u30FA\uFF66-\uFF9D\u31F0-\u31FF]/);
}不要使用$^将其锚定在字符串的开头和结尾,+在这种情况下是无用的。
发布于 2011-09-09 01:06:44
正确的答案是不对范围进行硬编码。永远不要在你的代码中放入魔术数字!这是维护的噩梦。它很难读,很难写,很难调试,很难维护。你怎么知道你的数字是对的?当他们添加新的时会发生什么?不,不要使用幻数。请。
正确的答案是使用命名的Unicode脚本,它是每个Unicode代码点的基本方面:
[\p{Han}\p{Hiragana}\p{Katakana}]这需要Javascript的XRegExp plugin。
真正的问题是,Javascript正则表达式本身是太原始的而不支持Unicode属性--因此,不支持Unicode。15年前,这也许是一种可以接受的妥协,但今天,正如你自己所发现的那样,这是不可容忍的疏忽。
您还会遗漏一些在新的Script Extensions属性中指定为假名的Common代码点,但可能无关紧要。您可以将\p{Common}添加到上面的集合中。
发布于 2019-05-01 15:04:07
既然Unicode属性转义是ES (2018)规范的一部分,如果JS引擎支持此功能,则可以在本地使用以下正则表达式(扩展@tchrist的答案):
/[\p{Script_Extensions=Han}\p{Script_Extensions=Hiragana}\p{Script_Extensions=Katakana}]/u如果要从匹配中排除标点符号:
/(?!\p{Punctuation})[\p{Script_Extensions=Han}\p{Script_Extensions=Hiragana}\p{Script_Extensions=Katakana}]/uhttps://stackoverflow.com/questions/7344871
复制相似问题