原文摘自官方 api 文档,具体请查看官网api
字符串数据类型
.allow(values)
默认情况下,空字符串被当做验证不通过。可以
.allow('')
允许特殊值
Joi.string().allow(1, 2, '')
.default(value)
默认值
需要指定什么值时,使用默认值
const schema = Joi.string().empty('a').default('aa');
schema.validate('a');
// { value: 'aa' }
.alphanum()
字符串必须包含字母和数字 a-z,A-Z,0-9
const schema = Joi.string().alphanum();
.base64([options])
验证字符串是否是有效的 base64 字符串,不检查解码值。
options- 可选paddingRequired- 如果
true,必须用=字符正确填充字符串。 - 默认为
true。
- 如果
- urlSafe
- 如果
true,使用 URI 安全 base64 格式 - 用
-替换+,用_替换\。 - 默认为
false.
- 如果
const schema = Joi.string().base64();
schema.validate('VE9PTUFOWVNFQ1JFVFM');
// ValidationError: "value" must be a valid base64 string
schema.validate('VE9PTUFOWVNFQ1JFVFM=');
// No Error
const paddingRequiredSchema = Joi.string().base64({ paddingRequired: true });
paddingRequiredSchema.validate('VE9PTUFOWVNFQ1JFVFM');
// ValidationError: "value" must be a valid base64 string
paddingRequiredSchema.validate('VE9PTUFOWVNFQ1JFVFM=');
// No Error
const paddingOptionalSchema = Joi.string().base64({ paddingRequired: false });
paddingOptionalSchema.validate('VE9PTUFOWVNFQ1JFVFM');
// No Error
paddingOptionalSchema.validate('VE9PTUFOWVNFQ1JFVFM=');
// No Error
.case(direction)
.uppercase();
.lowercase();
大小写转换
direction: 'lower' | 'upper'
const schema = Joi.string().case('lower');
.creditCard()
要求号码是信用卡号码
const schema = Joi.string().creditCard();
.dataUri([options])
要求字符串值是有效的数据 URI 字符串
options- 可选paddingRequired- 是否用
=填充。 - 默认为
true。
- 是否用
const schema = Joi.string().dataUri();
.domain([options])
要求字符串值是有效的域名。
options- 可选allowUnicode- 如果为
true,则允许使用 Unicode 字符 - 默认为
true。
- 如果为
minDomainSegments- 域段所需最小的数量。
- 默认为
2
maxDomainSegments- 允许的域段的最大数量。
- 默认为无限制。
tlds- TLD(顶级域)验证选项。
- 默认情况下,TLD 必须是 IANA 注册机构中,列出的有效名称。
- 要禁用验证,请设置
tlds为false。 - 要自定义 TLD 的验证方式,请设置以下其中一项:
-
allow- 其中之一:true使用已注册 TLD 的 IANA 列表。这是默认值。false允许deny列表中未列出的任何 TLD (如果存在)。- 一个
Set或一组允许的 TLD。不能与deny的列表一起使用。
-
deny- 其中之一:- 一个
Set或一组被禁止的 TLD。不能与自定义allow列表一起使用。
- 一个
-
.emali([options])
要求字符串值是有效的电子邮件地址。
options- 可选设置:allowUnicode- 如果为
true,则允许使用 Unicode 字符。 - 默认为
true。
- 如果为
ignoreLength- 如果为
true,忽略无效的电子邮件长度错误。 - 默认为
false。
- 如果为
minDomainSegments- 域段所需的最小数量。
- 默认设置不包括单段域,例如
example@io这是一个有效的电子邮件但非常不常见。 - 默认为
2。
maxDomainSegments- 允许的域段的最大数量。
- 默认为无限制。
multiple- 如果为
true,允许在单个字符串中包含多个电子邮件地址,由,或separator字符分隔。 - 默认为
false。
- 如果为
separator- 当
multiple为true时,覆盖默认,分隔符。 - 字符串可以是单个字符或多个分隔符。
- 默认为
','.
- 当
tlds- TLD(顶级域)验证选项。
- 默认情况下,TLD 必须是 IANA 注册机构中 列出的有效名称。
- 要禁用验证,请设置
tlds为false。 - 要自定义 TLD 的验证方式,请设置以下其中一项:
allow- 其中之一:true使用已注册 TLD 的 IANA 列表。这是默认值。false允许deny列表中未列出的任何 TLD (如果存在)。- 一个
Set或一组允许的 TLD。不能与deny的列表一起使用。
deny- 其中之一:- 一个
Set或一组被禁止的 TLD。不能与自定义allow列表一起使用。
- 一个
.guid([options])
.uuid()
要求字符串值是有效的 GUID。
options- 可选设置:version- 指定一个或多个可接受的版本。
- 可以是一个数组或字符串具有以下值:
uuidv1uuidv2uuidv3uuidv4uuidv5
- 如果没有
version指定,则假定它是一个泛型guid,它不会验证 guid 的版本或变体,而只检查通用结构格式。
separator- 定义允许或需要的 GUID 分隔符,其中:true- 需要一个分隔符,可以是:或-。false- 不允许使用分隔符。'-'- 需要一个破折号分隔符。':'- 需要冒号分隔符。- 默认为可选
:或-分隔符。
.hex([options])
要求字符串值是有效的十六进制字符串。
options- 可选byteAligned- 布尔值- 指定要检查的十六进制字符串,是否按字节对齐
- 如果
convert是true,0会被添加到需要添加的字符串前 - 默认值
false
const schema = Joi.string().hex();
.hostname()
根据 RFC1123 要求字符串值是有效的主机名。
const schema = Joi.string().hostname();
.insensitive()
在不区分大小写的比较中,允许值匹配允许列表或不允许列表中的任何值。
const schema = Joi.string().valid('a').insensitive();
.ip([options])
要求字符串值是有效的 IP 地址。
options- 可选的version- 要验证的一个或多个 IP 地址版本
- 有效值:
ipv4,ipv6,ipvfuture
cidr- 用于确定是否允许 CIDR。
- 有效值:
optional,required,forbidden
// Accept only ipv4 and ipv6 addresses with a CIDR
const schema = Joi.string().ip({
version: [
'ipv4',
'ipv6'
],
cidr: 'required'
});
.isoDate()
要求字符串值采用有效的 ISO 8601 日期格式。
如果验证convert选项打开(默认启用),字符串将被强制为简化的扩展 ISO 格式 (ISO 8601)。请注意,此操作使用 javascript Date 对象,该对象不支持完整的 ISO 格式,因此使用 convert.
const schema = Joi.string().isoDate();
schema.validate('2018-11-28T18:25:32+00:00');
// -> No Error
schema.validate('20181-11-28T18:25:32+00:00');
// -> ValidationError: must be a valid 8601 date
schema.validate('');
// -> ValidationError: must be a valid 8601 date
.isoDuration()
要求字符串值采用有效的 ISO 8601 持续时间格式。
const schema = Joi.string().isoDuration();
schema.validate('P3Y6M4DT12H30M5S');
// No Error
schema.validate('2018-11-28T18:25:32+00:00');
// ValidationError: must be a valid ISO 8601 duration
schema.validate('');
// ValidationError: must be a valid ISO 8601 duration
.length(limit, [encoding])
指定所需的确切字符串长度,其中:
limit- 所需的字符串长度。encoding- 如果指定,则使用提供的编码以字节为单位计算字符串长度。
const schema = Joi.string().length(5);
const schema = Joi.object({
length: Joi.string().required(),
value: Joi.string().length(Joi.ref('length'), 'utf8').required()
});
.lowercase()
要求字符串值全部为小写。如果验证convert选项打开(默认启用),字符串将被强制为小写。
const schema = Joi.string().lowercase();
.max(limit, [encoding])
指定最大字符串字符数,其中:
limit- 允许的最大字符串字符数encoding- 如果指定,则使用提供的编码以字节为单位计算字符串长度。
const schema = Joi.string().max(10);
const schema = Joi.object({
max: Joi.string().required(),
value: Joi.string().max(Joi.ref('max'), 'utf8').required()
});
.min(limit, [encoding])
指定最小字符串字符数,其中:
limit- 所需的最少字符串字符数encoding- 如果指定,则使用提供的编码以字节为单位计算字符串长度。
const schema = Joi.string().min(2);
const schema = Joi.object({
min: Joi.string().required(),
value: Joi.string().min(Joi.ref('min'), 'utf8').required()
});
.normalize([form])
要求字符串值采用 Unicode 规范化 形式。
如果验证convert选项打开(默认启用),字符串将被规范化。
form- 可选- 要使用的 Unicode 规范化形式
- 有效值:
NFC[默认]NFDNFKCNFKD
.pattern(regex, [name | options]) - aliases: regex
定义模式规则,其中:
regex- 字符串值必须与之匹配的正则表达式对象。请注意,如果模式是正则表达式,为了匹配整个键名,它必须^以$。name- 模式的可选名称(对多个模式有用)。options- 具有以下支持属性的可选配置对象:name- 可选的模式名称。invert- 可选的布尔标志。默认为false。如果指定为true,则将不允许提供的模式而不是必需的。
.replace(pattern, replacement)
用指定的字符串替换与给定模式匹配的字符,其中:
pattern- 要匹配的正则表达式对象。replacement- 将替换模式的字符串。
.token()
要求字符串值仅包含 a-z、A-Z、0-9 和下划线 _。
.trim([enabled])
要求字符串值前后不包含空格。如果验证convert选项打开(默认启用),字符串将被 trim。
.truncate([enabled])
指定是否按 string.max() 将 limit 用作截断。
参数是:
enabled- 可选参数默认true, 允许您通过提供一个虚假值来重置 truncate 的行为。
.uppercase()
要求字符串值全部为大写。如果验证convert选项打开(默认启用),字符串将被强制为大写。
.uri([options])
要求字符串值是有效的 RFC 3986 URI。
options- 可选设置:scheme- 指定一个或多个可接受的方案,应仅包含方案名称。可以是数组或字符串(字符串会自动转义以用于正则表达式)。allowRelative- 允许相对 URI。默认为false.relativeOnly- 仅限制相对 URI。默认为false.allowQuerySquareBrackets- 允许在查询字符串中使用未编码的方括号。这不符合 RFC 3986 标准,但类似的查询字符串abc[]=123&abc[]=456如今非常普遍。默认为false.domain- 使用中指定的选项验证域组件string.domain()。
// Accept git or git http/https
const schema = Joi.string().uri({
scheme: [
'git',
/git+https?/
]
});