JavaScript表单验证:如何用正则匹配尾字符0/5且倒数第二位为奇数
嘿,我来帮你搞定这个表单验证的正则问题!
首先先拆解你的需求,明确规则:
- 字符串最后一位必须是
0或5 - 如果字符串长度 ≥2,倒数第二位必须是奇数(也就是
1、3、5、7、9) - 允许长度为1的字符串(仅
0或5)
先说说你现有正则的小问题:/([0|5]$)/g 里的 g 标志没必要(表单验证只需要验证整个字符串是否符合规则,不需要全局匹配),而且方括号里的 | 是多余的——[0|5] 会匹配 0、|、5 三个字符,不是你想要的,应该写成 [05]。
接下来是满足你所有需求的正则:
const validateRegex = /^.*[13579][05]$|^[05]$/;
正则拆解:
这个正则用 | 分成了两种符合规则的情况:
- 情况一(字符串长度 ≥2):
^.*[13579][05]$^匹配字符串开头.*匹配任意数量的任意字符(覆盖前面所有内容,不管长度)[13579]精准匹配倒数第二位的奇数[05]匹配最后一位的0或5$匹配字符串结尾
- 情况二(字符串长度 =1):
^[05]$- 直接匹配单个
0或5
- 直接匹配单个
实际使用示例(JavaScript):
你可以用正则的 test() 方法来验证表单输入:
// 测试用例 console.log(validateRegex.test("5")); // true(符合长度1的规则) console.log(validateRegex.test("10")); // true(倒数第二位是奇数1,最后一位0) console.log(validateRegex.test("xyz75")); // true(前面任意字符,倒数第二位7是奇数,最后一位5) console.log(validateRegex.test("20")); // false(倒数第二位是偶数2) console.log(validateRegex.test("a5")); // false(倒数第二位是字母,不是奇数) console.log(validateRegex.test("12")); // false(最后一位不是0/5)
如果想要更简洁的写法,也可以把两种情况合并成一个(逻辑是完全一致的):
const validateRegex = /^(?:.*[13579][05]|[05])$/;
这里的 (?:...) 是非捕获组,只是用来把两个规则分组,不会额外捕获匹配内容,不影响最终验证结果。
内容的提问来源于stack exchange,提问作者JavaFish
相关产品推荐
相关产品推荐

