首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >年龄验证正则表达式应该拒绝以零开头的3位数,返回一些奇怪的东西

年龄验证正则表达式应该拒绝以零开头的3位数,返回一些奇怪的东西
EN

Stack Overflow用户
提问于 2012-12-03 16:13:41
回答 4查看 1.5K关注 0票数 1

我正在尝试编写一段正则表达式代码,用于验证一个简单表单的年龄是否为1、2或3位数字。如果它有3个数字,那么前导数字必须是1,并且前导数字永远不是0。

到目前为止,我所拥有的:

/^1[0-9][0-9]$|^[0-9][0-9]$|^[0-9]$/

这种奇怪行为的一个例子:

代码语言:javascript
运行
复制
> myRe = /^1[0-9][0-9]$|^[0-9][0-9]$/;
> myRe.exec(023);
["19"]
> myRe.exec(052);
["42"]
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-12-03 16:17:07

023是一个数字,正则表达式不适用于数字。因此,JavaScript首先将数字转换为字符串。因为0是一个八进制数,所以023实际上是2 * 8 + 3,而不是2 * 10 + 3

您希望改为使用myRe.exec("023")。此外,您可能希望修改正则表达式,使两位数分支中的第一个数字和最后一个分支中的单个数字读取[1-9],而不是[0-9]

票数 2
EN

Stack Overflow用户

发布于 2012-12-03 16:20:03

如果一个数字以0开头,它会被解释为八进制(以8为基数)。所以052 (基数8)实际上是42 (基数10)。然后将其转换为字符串("42")并进行正则表达式。

就你的正则表达式而言:我会像这样改进它:

代码语言:javascript
运行
复制
/^1[0-9][0-9]$|^[1-9][0-9]$|^[0-9]$/
票数 2
EN

Stack Overflow用户

发布于 2012-12-03 16:17:21

在表达式中

代码语言:javascript
运行
复制
myRe.exec(023);

023是一个八进制数。您要检查的是一个字符串。所以要用引号把它括起来

/^1?\d{1,2}$/ -这里是同一个regex的一个更短、更易读的版本。

或者/^1?\d?\d$/,看你更喜欢哪个。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13679383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档