import { toString } from 'ut2';
import { objectValues } from './utils/native';
var chineseDictionary = {
// 基本汉字
chineseBasic: '[\u4e00-\u9fa5]',
// 基本汉字补充
chineseExtend: '[\u9ea6-\u9fff]',
// 兼容性表意文字
chineseExtend2: '[\uF900-\uFAD9]',
// 汉字扩展A
chineseExtendA: '[\u3400-\u4DBF]',
// 汉字扩展B
chineseExtendB: "[\uD840\uDC00-\uD869\uDEDF]",
// 汉字扩展C
chineseExtendC: "[\uD869\uDF00-\uD86D\uDF38]",
// 汉字扩展D
chineseExtendD: "[\uD86D\uDF40-\uD86E\uDC1D]",
// 汉字扩展E
chineseExtendE: "[\uD86E\uDC20-\uD873\uDEA1]",
// 汉字扩展F
chineseExtendF: "[\uD873\uDEB0-\uD87A\uDFE0]",
// 汉字扩展G
chineseExtendG: "[\uD880\uDC00-\uD884\uDF4A]",
// 汉字扩展H
chineseExtendH: "[\uD884\uDF50-\uD888\uDFAF]",
// 汉字扩展I
chineseExtendI: "[\uD87A\uDFF0-\uD87B\uDE5D]"
};
var looseChineseRegExp = chineseDictionary.chineseBasic + '+';
var chineseRegExp = '^' + chineseDictionary.chineseBasic + '+$';
var chineseWithExtend = '(?:' + objectValues(chineseDictionary).join('|') + ')';
var looseChineseExtendRegExp = chineseWithExtend + '+';
var chineseExtendRegExp = '^' + chineseWithExtend + '+$';
// eslint-disable-next-line no-prototype-builtins
var supportRegExpUnicode = RegExp.prototype.hasOwnProperty('unicode');
/**
* 检测值是否为中文
*
* @static
* @alias module:Validator.isChinese
* @since 1.1.0
* @see {@link http://www.unicode.org/reports/tr38/#BlockListing | 4.4 Listing of Characters Covered by the Unihan Database}
* @see {@link https://zh.wikipedia.org/wiki/Unicode字符平面映射 | Unicode字符平面映射}
* @see {@link https://zh.wikipedia.org/wiki/Unicode區段 | Unicode区段}
* @param {*} value 要检测的值
* @param {Object} [options] 配置项
* @param {boolean} [options.loose=false] 宽松模式。如果为true,只要包含中文即为true
* @param {boolean} [options.useExtend=false] 使用统一表意文字扩展A-I。注意:如果不支持 `RegExp.prototype.unicode`,扩展字符集将自动不生效,如IE浏览器。
* @returns {boolean} 值是否为中文
* @example
*
* isChinese('林某某'); // true
* isChinese('林A'); // false
*
* // 宽松模式,只要包含中文即为true
* isChinese('林A', { loose: true }); // true
* isChinese('A林A', { loose: true }); // true
*
* // 扩展字符集的字符
* isChinese('𠮷'); // false
*
* // 使用中文扩展字符集,需要浏览器支持 RegExp.prototype.unicode 才生效。
* isChinese('𠮷', { useExtend: true }); // true
* isChinese('𠮷aa', { useExtend: true, loose: true }); // true
*
*/
function isChinese(value, options) {
if (options === void 0) { options = {}; }
var _a = options.loose, loose = _a === void 0 ? false : _a, _b = options.useExtend, useExtend = _b === void 0 ? false : _b;
var valueStr = toString(value);
var basicRegExp = loose ? looseChineseRegExp : chineseRegExp;
var extendRegExp = loose ? looseChineseExtendRegExp : chineseExtendRegExp;
var hasExtend = useExtend && supportRegExpUnicode;
var resultRegExp = hasExtend ? extendRegExp : basicRegExp;
var flag = hasExtend ? 'u' : undefined;
var reg = new RegExp(resultRegExp, flag);
return reg.test(valueStr);
}
export default isChinese;