日期:2014-05-17  浏览次数:21082 次

UUID正则表达式总是不匹配
package com.tarena.util;

import java.util.UUID;

public class VerifyUtil {
  public static String randomUUID(){
  UUID uuid = UUID.randomUUID();
  return uuid.toString();
  }
   
  public static void main(String[] args){
  String reg = 
  "/^[0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12}$/";
  System.out.println(randomUUID().matches(reg));
  }
}
用来检查UUID格式的,不知道为什么打印出来的的总是false
正则表达式应该没错吧

------解决方案--------------------
String reg = "/^[0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12}$/";

这是 JavaScript 中的正则表达式语法!

另外,你这个当中有个 BUG,UUID 是 16 个字节的唯一值,其用十六进制表示是 32 位。所以这个当中的 a-z 应该改为 a-f

在 Java 中要写成这样:

String reg = "^[0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12}$";

在 Java 中 ^ 和 $ 可以去掉不加。如果考虑像这个帖子 URL 中大写 UUID 的话,可以把 A-F 也加上去。