前端如何验证发送给API的Flag数值是否合法?
前端校验C# Flags枚举的有效Flag值
我需要把一个数值发送到API,想在前端做个软检查,确认它是不是有效的Flag值。我理解的有效Flag值是:二进制以1开头,后面跟0个或多个0的数字,或者直接是0。对应的C# Flags枚举如下:
[Flags] public enum CarColors : ushort { Other = 0, Blue = 1, Red = 1 << 1, Black = 1 << 2, Green = 1 << 3, Orange = 1 << 4, }
解决方案
- 核心判断逻辑:有效Flag值要么是0,要么是2的整数次幂(二进制仅含单个1的非零整数)
- 前端校验函数(以JavaScript为例):
function isValidFlagValue(value) { // 校验是否为ushort范围内的非负整数 if (!Number.isInteger(value) || value < 0 || value > 65535) { return false; } // 0是合法值 if (value === 0) { return true; } // 2的整数次幂满足:value & (value - 1) === 0 return (value & (value - 1)) === 0; }
- 关键说明:
- 必须校验数值在**ushort的范围(0~65535)**内,和后端枚举的类型匹配
- 利用二进制位运算快速判断2的整数次幂,比循环或数学计算更高效
内容的提问来源于stack exchange,提问作者Randy Hall
相关产品推荐
相关产品推荐

