检查字符串是否仅包含 Unicode 值 [\u0030-\u0039] 或 [\u0660-\u0669]

Fai*_*wai 2 java regex unicode java-8

我需要在 java 中检查字符串是否仅由 Unicode 值 [\u0030-\u0039] 或 [\u0660-\u0669] 组成。做到这一点最有效的方法是什么?

Pre*_*ate 5

使用 \x 表示 unicode 字符:

^([\x{0030}-\x{0039}\x{0660}-\x{0669}]+)$
Run Code Online (Sandbox Code Playgroud)

如果模式也应该匹配空字符串,请使用 * 而不是 +

如果您不想允许混合您提供的两组字符,请使用此选项:

^([\x{0030}-\x{0039}]+|[\x{0660}-\x{0669}]+)$
Run Code Online (Sandbox Code Playgroud)

https://regex101.com/r/xqWL4q/6

正如霍尔格在下面的评论中提到的。\x{0030}-\x{0039}相当于[0-9]. 因此可以替换并且更具可读性。

  • @Joey,你甚至不需要“\u”转义来表达像“0”和“9”这样简单的字符。此外,当“[…]”已经支持指定多个字符范围时,没有必要使用“|”来组合字符范围。使用具有两个范围的“[...]”消除了分组的需要,而仅当使用模式进行类似搜索的操作时才需要锚点,就像在在线正则表达式测试器中一样,而例如在字符串上调用“matches”则不需要需要他们。使整个操作像[`string.matches("[0-9٠-٩]*")`](/sf/answers/4241885161/)一样简单... (2认同)