【发布时间】:2019-07-31 22:38:38
【问题描述】:
我正在使用 p{Digit} 来验证字符串。但是,当我使用“101ᶁ1”时,结果为真。这发生在一些符号上:ᶁ,ﻹ
Pattern p = Pattern.compile("[\\p{Digit}]");
boolean result = p.matcher(value).find();
我没有找到文档中经过验证的字符。
【问题讨论】:
我正在使用 p{Digit} 来验证字符串。但是,当我使用“101ᶁ1”时,结果为真。这发生在一些符号上:ᶁ,ﻹ
Pattern p = Pattern.compile("[\\p{Digit}]");
boolean result = p.matcher(value).find();
我没有找到文档中经过验证的字符。
【问题讨论】:
我相信你误解了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}+");
【讨论】: