我生成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