【问题标题】:Why p{Digit} Pattern is not Working in Java? [duplicate]为什么 p{Digit} 模式在 Java 中不起作用? [复制]
【发布时间】:2019-07-31 22:38:38
【问题描述】:

我正在使用 p{Digit} 来验证字符串。但是,当我使用“101ᶁ1”时,结果为真。这发生在一些符号上:ᶁ,ﻹ

Pattern p = Pattern.compile("[\\p{Digit}]");
boolean result = p.matcher(value).find();

我没有找到文档中经过验证的字符。

【问题讨论】:

标签: java regex


【解决方案1】:

我相信你误解了find() 的用法。它搜索 any 在搜索文本中第一次出现的正则表达式。 (Pattern.start()返回找到表达式的位置)

表达式"[\\p{Digit}]" - [] 在这里什么都不做 - 只是匹配一个数字。由于搜索到的文字有数字,所以find()的结果是true

要匹配整个文本,表达式必须以^ 开头以匹配文本的开头,并以$ 结尾,对应于文本的结尾。而且它必须允许多于一位,所以它需要一个+(一个或多个)导致

Pattern p = Pattern.compile("^\\p{Digit}+$");
boolean result = p.matcher(value).find();

matches() 可用于测试整个文本,因此不需要 ^$ - 仍然需要 + 以允许多于一位:

Pattern p = Pattern.compile("\\p{Digit}+");
boolean result = p.matcher(value).matches();

注意:这可以写成:

boolean result = value.matches("\\p{Digit}+");

【讨论】:

  • 确实,我需要检查字符是否不是数字,不是标点符号,也不是拉丁字符。换句话说,例如,当字符串包含 ᶁ 时,我需要返回 false。我正在尝试这种模式:Pattern p = Pattern.compile("^\\p{IsLatin}\\p{Digit}\\p{Punct}+$");。但是,不要工作。
猜你喜欢
  • 2010-09-20
  • 2021-05-16
  • 1970-01-01
  • 1970-01-01
  • 2016-07-18
  • 2017-04-11
  • 2020-06-10
  • 1970-01-01
  • 2021-07-24
相关资源
最近更新 更多