我生成UUID,并在我的代码中针对正则表达式进行验证;我只是跑成困惑我什么是有效的UUID?
这里的问题是,产生的UUID(在mongodb的上下文中)的代码
import java.util.UUID;
... ...
Document setOnInsert = new Document(Params.sender, UUID.randomUUID())
.append(Params.userDevice, userDevice)
.append(Params.hostId,"");
这是一个验证的UUID的代码;我已经从这个post
static final Pattern UUID = Pattern.compile("([0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})");
public static boolean isUUID(String uuid){
if(uuid == null){
return false;
}else{
return UUID.matcher(uuid).matches();
}
}
复制的正则表达式和下面是2点的UUID我与
aa4aaa2c-c6ca-d5f5-b8b2-0b5c78ee2cb7
b24dd64c-de6b-5bf6-6283-aa2167cc93a7
这两个的UUID已通过上述代码产生问题;验证方法(isUUID())在我最近的调试中将它们判断为无效;但我贴这些的UUID到在线validator,和它说OK
这是我的系统信息
[email protected]:~$ java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
[email protected]:~$
[email protected]:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.1 LTS
Release: 16.04
Codename: xenial
[email protected]:~$
一些背景:我一直在努力在JDK 1.8.0_111;这些UUID已经生成,并且没有问题。然后我今天升级到1.8.0_121,并遇到这个问题...
所以我的问题是:上述UUID是否正确或错误?谁相信,发电机或验证
为什么不直接使用UUID类来验证它们? ''UUID.fromString()' – wvdz
问题出现在模式的这一部分:'[1-5] [0-9a-f] {3} - [89ab] [0-9a-f] {3}' 。在第一个你有一个“D”你应该有1-5;在第二个中你有6个,你应该有8-b。 –
[RFC 4122](https://tools.ietf.org/html/rfc4122)对这些组的第一个十六进制数字没有这样的限制,它只是说组包含两个'hexOctet'(它是两个十六进制数字每)。您比规范限制更多。信任内置的发生器,不信任“在互联网上的某处发现”验证器。 – Amadan