在没有分隔符的情况下验证UUID" - "

时间:2014-11-27 14:21:13

标签: java regex validation uuid

我得到的格式如" 005056963AB75FD48BDC59C100314C40"并想要验证它们。我尝试过这样的代码:

public boolean isUUID(String uuid){

    try {
        UUID.fromString(uuid);
    } catch (Exception e) {
        return false;
    }
    return true;

}

但这会告诉我" 005056963AB75FD48BDC59C100314C40"不是有效的ID。另一方面,网站http://guid.us/Test/GUID告诉我它是,并给了我一个UUID与" - "添加。 有没有一种优雅的方法可以在java中验证这个UUID,或者我必须手动添加" - "到了正确的地方?

4 个答案:

答案 0 :(得分:2)

尝试正则表达式

    uuid = uuid.replaceAll("(.{8})(.{4})(.{4})(.{4})(.+)", "$1-$2-$3-$4-$5");
    UUID.fromString(uuid);

答案 1 :(得分:0)

您可以使用此Java正则表达式代码将连字符放在UUID字符串中的正确位置:

String s = "005056963AB75FD48BDC59C100314C40";
s = s.replaceAll(
        "(?i)([a-f0-9]{8})([a-f0-9]{4})([a-f0-9]{4})([a-f0-9]{4})([a-f0-9]{12})", 
        "$1-$2-$3-$4-$5");

System.out.printf("UUID: [%s]%n", s);
//=> 00505696-3AB7-5FD4-8BDC-59C100314C40

更新:非正则表达式解决方案(请访问@atamanroman)

StringBuilder sbr = new StringBuilder(s);
for(int i=8, j=0; i<=20; i+=4, j++)
    sbr.insert(i+j, '-');

UUID uuid = UUID.fromString( sbr.toString() );

答案 2 :(得分:0)

要将破折号添加到UUID字符串中,我建议使用StringBuilder#insert(int offset, chat c),如@atamanroman所述。

final String uuid = new StringBuilder("005056963AB75FD48BDC59C100314C40")
        .insert(20, '-')
        .insert(16, '-')
        .insert(12, '-')
        .insert(8, '-')
        .toString();

System.out.println(uuid);

答案 3 :(得分:0)

这是一个验证不带连字符的UUID字符串的函数示例。因为它不使用正则表达式或缓冲,所以速度更快。没有连字符的UUID只是32个十六进制字符的字符串。

public class Example1 {
    /**
     * Validate UUID without hyphens.
     * 
     * @param uuid a uuid string
     * @return true if valid
     */
    public static boolean isValid(String uuid) {

        if (uuid == null || uuid.length() != 32) {
            return false;
        }

        final char[] chars = uuid.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            final int c = chars[i];
            if (!((c >= 0x30 && c <= 0x39) || (c >= 0x61 && c <= 0x66) || (c >= 0x41 && c <= 0x46))) {
                // ASCII codes: 0-9, a-f, A-F
                return false;
            }
        }
        
        return true;
    }

    public static void main(String[] args) {
        String uuid = "005056963AB75FD48BDC59C100314C40";
        if(isValid(uuid)) {
            // do something
        }
    }
}

您还可以使用库UuidValidator.isValid()中的uuid-creator。它验证带或不带连字符的UUID字符串。这是另一个示例:

import com.github.f4b6a3.uuid.util.UuidValidator;

public class Example2 {

    public static void main(String[] args) {
        String uuid = "005056963AB75FD48BDC59C100314C40";
        if(UuidValidator.isValid(uuid)) {
            // do something
        }
    }
}

但是,如果您只想将字符串转换为UUID,则可以使用UuidCreator.fromString()。此功能还可以验证输入。

import java.util.UUID;
import com.github.f4b6a3.uuid.util.UuidValidator;

public class Example3 {
    public static void main(String[] args) {
        String uuidString = "005056963AB75FD48BDC59C100314C40";
        UUID uuid = UuidCreator.fromString(uuidString);
    }
}

项目页面:https://github.com/f4b6a3/uuid-creator