gpt4 book ai didi

java - 包含汉字和全角/半角字符的正则表达式

转载 作者:搜寻专家 更新时间:2023-10-31 20:10:07 33 4
gpt4 key购买 nike

我正在为一个 java 项目做验证规则,我得到的要求之一是:

"The ID card address should contain no less than eight (≥8) Chinese characters (exclusive of full-width/half-width symbols)."

我不知道如何解决这个问题。

我已经到了可以验证中文字符但无法排除所有全角/半角符号的地步。

return Pattern.matches("^[\\p{IsHan}]{8,}$", address);

结果应该是这样的

  • 名字名字名字名字 = true
  • 名字名字名(字)= true
  • 名字名字名(字) = false
  • 名字名字名(字)= false

有人有什么建议吗?

最佳答案

假设要检查字符串中是否有8个或更多的汉字:

Pattern.compile("^(\\P{sc=Han}*\\p{sc=Han}){8}.*$", Pattern.DOTALL);

由于不清楚您认为汉字是什么,所以我使用汉字 script作为近似值。根据Unicode 6.2.0 , 汉字被定义为包含以下代码点:

2E80..2E99    ; Han # So  [26] CJK RADICAL REPEAT..CJK RADICAL RAP
2E9B..2EF3 ; Han # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
2F00..2FD5 ; Han # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
3005 ; Han # Lm IDEOGRAPHIC ITERATION MARK
3007 ; Han # Nl IDEOGRAPHIC NUMBER ZERO
3021..3029 ; Han # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
3038..303A ; Han # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
303B ; Han # Lm VERTICAL IDEOGRAPHIC ITERATION MARK
3400..4DB5 ; Han # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
4E00..9FCC ; Han # Lo [20941] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FCC
F900..FA6D ; Han # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
FA70..FAD9 ; Han # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
20000..2A6D6 ; Han # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
2A700..2B734 ; Han # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B740..2B81D ; Han # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
2F800..2FA1D ; Han # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D

Java 8 is using Unicode 6.2.0 , 所以 \p{sc=Han} 匹配上面列出的代码点。但是,该实现还包括未分配的代码点(在已分配的 block 中)和未分配的 block ,因此请注意将 JRE 升级到最新的主要版本,以确保程序在向 Unicode 添加更多字符时正确运行。

特别是,\p{sc=Han} 在 Oracle 的实现中包括这些范围:

  • U+2E80 - U+2FEF:CJK 部首补充(整 block )、Kangxi 部首(整 block )和未分配 block 中的 16 个代码点。
  • U+3005、U+3007、U+3021 - U+3029、U+3038 - U+303B:CJK 符号和标点符号( block 中的一些字符)
  • U+3400 - U+4DBF:中日韩统一表意文字扩展 A(整 block )
  • U+4E00 - U+9FFF:中日韩统一表意文字(整 block )
  • U+F900 - U+FAFF:中日韩兼容表意文字(整 block )
  • U+20000 - U+E0000:CJK Unified Ideographs Extension B/C/D/E(整 block ),CJK Compatibility Ideographs Supplement(整 block ),和几个未分配的 Unicode 平面,加上标签 block 中的一个保留代码点.

关于java - 包含汉字和全角/半角字符的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33612210/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com