在mongodb / mongoose中存储颜色十六进制值的最佳方法是什么

时间:2014-09-13 10:29:33

标签: mongodb mongoose

我需要为#fff#fafafared等项目存储一些十六进制颜色。我应该为此目的使用什么样的最佳类型?

谢谢!

2 个答案:

答案 0 :(得分:5)

只需使用String并添加一些验证以确保输入的类型正确:

COLORS = ['red', 'blue', ...];

function colorValidator (v) {
    if (v.indexOf('#') == 0) {
        if (v.length == 7) {  // #f0f0f0
            return true;
        } else if (v.length == 4) {  // #fff
            return true;
        }
    }
    return COLORS.indexOf(v) > -1;
};

new Schema({
    color: { type: String, validate: [colorValidator, 'not a valid color'] }
});

我快速写了colorValidator以帮助您获得一个想法,但您可以轻松扩展它以获得更复杂的颜色验证。

答案 1 :(得分:0)

您可以将validator与正则表达式测试结合使用:

const colorValidator = (v) => (/^#([0-9a-f]{3}){1,2}$/i).test(v)

const schema = new Schema({
  color: {
    type: String,
    validator: [colorValidator, 'Invalid color'],
    required: true,
  },
});

它与#fff #ffffff #FFF #FFFFFF(3位和6位数字,不区分大小写)匹配。