无需正则表达式,如何验证用户输入字符串匹配后端掩码?
无正则表达式时验证掩码规则的方法
如果后端返回类似99-99-99的掩码规则(其中9代表任意整数,其他字符为固定格式符),可以通过以下两步逻辑验证用户输入是否符合要求:
核心验证步骤
先校验长度一致性
直接对比用户输入字符串和掩码的长度,若长度不同,直接判定不符合规则。比如掩码99-99-99长度为8,输入必须也是8位,否则无需继续校验。逐字符比对校验
遍历掩码和输入的每一个对应位置,分两种情况判断:- 若掩码当前字符是
9:检查输入对应位置的字符是否为0-9的数字(通过字符的ASCII范围判断,即字符在'0'到'9'之间) - 若掩码当前字符是固定格式符(比如示例中的
-):检查输入对应位置的字符是否与掩码中的该字符完全一致
- 若掩码当前字符是
示例与伪代码
验证示例
- 掩码:
99-99-99 - 合法输入:
12-34-56(长度匹配,所有9位置都是数字,-位置完全一致) - 非法输入:
1a-34-56(第2位不是数字)、12_34_56(分隔符不匹配)、123-456(长度不符)
伪代码实现
function validateMask(input, mask) { // 第一步:长度校验 if (input.length !== mask.length) { return false; } // 第二步:逐字符校验 for (let i = 0; i < mask.length; i++) { const maskChar = mask[i]; const inputChar = input[i]; if (maskChar === '9') { // 检查是否为数字字符 if (!(inputChar >= '0' && inputChar <= '9')) { return false; } } else { // 检查固定格式符是否匹配 if (inputChar !== maskChar) { return false; } } } return true; }
注意事项
- 无需依赖正则引擎,逻辑简单直接,适合所有不支持正则的环境
- 字符范围判断要基于字符本身的ASCII值,避免因编码问题导致错误
- 固定格式符需严格匹配,包括大小写、特殊符号等(若掩码是
99A99,输入对应位置必须是A)
内容的提问来源于stack exchange,提问作者tasjapr
相关产品推荐
相关产品推荐

