这个。。。

〇到底是不是汉字呢?Screenshot_20220621-231919.png
回复列表(55)
  • @Ta / 06-21 23:21 / /
    😂打字出来〇
  • @Ta / 06-21 23:22 / /

    ○这个现在算在符号里面了吧。
    红米K30S

  • @Ta / 06-21 23:31 / /

    虎绿林的源码说,只支持某个范围内的中文

    static function 匹配汉字($str, $extra = '')
    {
        $preg = '/^[\x{4e00}-\x{9fa5}' . $extra . ']+$/u';
        return preg_match($preg, $str);
    }
    

    另外,你的内信好多啊

  • @Ta / 06-21 23:38 / /

    @-卧龙凤雏-,它是汉字,但不在我允许的范围内

    https://unicode-table.com/cn/3007/

    Screenshot_20220621_233801.jpg

  • @Ta / 06-22 09:59 / /

    @-卧龙凤雏-,Unicode其实对它有不同的看法,Unicode似乎认为它是标点符号,不是字,分在了“中日韩符号和标点”区块里。

    更正,虽然放在了标点符号区块里,但Unicode属性其实认为它是汉字,参考这个知乎回答。此外24楼的正则表达式匹配结果也说明了这一点。

    正常的“零”和其他常规汉字是分在“中日韩统一表意文字”区块里的。但正如这个知乎回答所说,“UCS 中文字(script)仅能与字符建立映射,与块(block)则不能。”字符放错区块,或者当年认为是符号现在认为是字这种事情是可以出现的。

    https://unicode-table.com/cn/96F6/

    Screenshot_20220621_234257.jpg

  • @Ta / 06-22 10:34 / /

    @-卧龙凤雏-@无名啊,从技术上来说,虎绿林只允许位于“基本多文种平面”(BMP)的“中日韩统一表意文字”(Unihan)基本区块,也就是下表的第一行(基本区),不包括第二行(基本区补充)。

    6月22日更新:现已改变,已允许所有Unicode汉字(29楼)。

    022d2494f9280e9d8b5c5b026161f2d050805d2e.png@664w_530h_progressive.jpg

    https://www.bilibili.com/read/mobile?id=13165737

  • @Ta / 06-21 23:54 / /

    @老虎会游泳,有没有啥简洁的表示方法?我过滤要自己搜集范围,老累了。后面要是扩展还要跟踪

    # Unicode 参考来源:https://www.unicode.org/versions/Unicode13.0.0/ch18.pdf
    unicodes = (
        # 中文
        (0x4E00, 0x9FFF), (0x3400, 0x4DBF), (0x20000, 0x2A6DF), (0x2A700, 0x2B73F), (0x2B740, 0x2B81F),
        (0x2B820, 0x2CEAF), (0x2CEB0, 0x2EBEF), (0x30000, 0x3134F), (0xF900, 0xFAFF), (0x2F800, 0x2FA1F),
        # 中文 小扩展
        (0x9FA6, 0x9FB3), (0x9FB4, 0x9FBB), (0x9FBC, 0x9FC2), (0x9FC3, 0x9FC3), (0x9FC4, 0x9FC6), (0x9FC7, 0x9FCB),
        (0x9FCC, 0x9FCC), (0x9FCD, 0x9FCF), (0x9FD0, 0x9FD0), (0x9FD1, 0x9FD5), (0x9FD6, 0x9FE9), (0x9FEA, 0x9FEA),
        (0x9FEB, 0x9FED), (0x9FEE, 0x9FEF), (0x9FF0, 0x9FFC), (0x4DB6, 0x4DBF), (0x2A6D7, 0x2A6DD),
        # 日文
        (0x3040, 0x309F), (0x30A0, 0x30FF), (0x31F0, 0x31FF), (0x1B130, 0x1B16F), (0x1B000, 0x1B0FF), (0x1B100, 0x1B12F),
        # 韩文
        (0x1100, 0x11FF), (0xA960, 0xA97F), (0xD7B0, 0xD7FF), (0x3130, 0x318F), (0xAC00, 0xD7A3),
    )
    
  • @Ta / 06-21 23:59 / /

    @老虎会游泳,我当初看不懂这个,找不到chinese之类的。。

  • @Ta / 06-22 00:43 / /

    @无名啊,要有一些Unicode知识。中日韩统一表意文字叫做“Unihan”,所以是

    /^\p{Han}+$/u
    

    Screenshot_20220622_000339.jpg

  • @Ta / 06-22 00:03 / /

    @老虎会游泳,只要中文呢?

  • @Ta / 06-22 00:05 / /

    〇。。。真有这个汉子。。
    虎友高配版(绿色)

  • @Ta / 06-22 00:10 / /

    @无名啊,这个问题换个问法可能更容易理解:

    如何只要日文呢?

    日文不只有平假名片假名,日文是有汉字的。那你猜日文汉字编码在哪里?

    当然是和中文汉字在一起啦,4e00-9fa5中的一部分就是日文汉字,但是部分字也同时是中文汉字、韩文汉字(现在可能仅用于韩国人的身份证)。这就是“中日韩统一表意文字”这个统一的含义。

    相同的字如果在不同的国家有不同的字形,是靠字体区分的。这就是很多字体有SC/TC/JP/KR之分的原因。

  • @Ta / 06-22 00:12 / /

    @老虎会游泳,所以没有直接表示纯中文的Unicode字符属性对吧

  • @Ta / 06-22 00:13 / /

    @无名啊,我猜日文平假名、片假名和韩文彦文都不在Han的范围里。Han应该只有汉字,但可能无法区分是否为日文专用汉字或韩文专用汉字。要获取更详细的unicode元信息,可能需要使用其他函数逐字分析。

  • @Ta / 06-22 00:19 / /

    @无名啊,顺便一提,你可能不需要知道它是不是日文专用汉字。因为:

    仮 4EEE
    円 5186
    圧 5727

    这些日文汉字早就在你指定的范围(4e00-9fff)里了

    https://www.bilibili.com/read/mobile?id=897590

  • @Ta / 06-22 00:22 / /

    @无名啊,但这些不是日本人创造的,还是中国人创造的,只是他们在标准化时选择了这几个字,而中国做出了其他选择(比如反、元、压)。所以从理论上来说,这些“日文专用汉字”依然是中国汉字,只是现代汉语不使用罢了。姓名和古汉语都有可能用到。

    仮 4EEE
    円 5186
    圧 5727

  • @Ta / 06-22 00:31 / /

    @无名啊,Unicode字符属性Han应该可以保证它是一个汉字,不是假名,不是谚文。至于它的来源,可能不重要。所有的汉字及其变体最终都可以追溯到中国。

    平假名:Hiragana
    片假名:Kannada
    谚文:Hangul

    所以Han肯定只有汉字。

  • @Ta / 06-22 10:39 / /

    @无名啊,其实有一个很简单的方法证明18楼的观点,就是看你给出的范围是不是恰好就是Unihan的范围。
    如果是,那它其实就是/\p{Han}+/u,并没有区别字符的来源国(来源国这种事情其实往往说不清)。

    (0x4E00, 0x9FFF),
    (0x3400, 0x4DBF),
    (0x20000, 0x2A6DF),
    (0x2A700, 0x2B73F),
    (0x2B740, 0x2B81F),
    (0x2B820, 0x2CEAF),
    (0x2CEB0, 0x2EBEF),
    (0x30000, 0x3134F),
    (0xF900, 0xFAFF),
    (0x2F800, 0x2FA1F),
    


    恰好是的呢(你给的范围更大,包含了未分配的区域,但是完整的覆盖了Unihan的范围),所以你并不在意汉字的来源国,你只是想匹配Unihan中的任意字符而已。

    那么,你要的恰好就是:

    /^\p{Han}+$/u
    
添加新回复
回复需要登录