Javascript 年龄验证正则表达式,该正则表达式应拒绝以零开头的3位数字,并返回奇怪的内容

Javascript 年龄验证正则表达式,该正则表达式应拒绝以零开头的3位数字,并返回奇怪的内容,javascript,regex,Javascript,Regex,我正在尝试编写一段正则表达式代码,用于验证一个简单表单中有1、2或3位数字的年龄。如果它有3个数字,则前导数字必须是1,并且前导数字永远不为0 到目前为止,我所拥有的: /^1[0-9][0-9]$|^[0-9][0-9]$|^[0-9]$/ 这种奇怪行为的一个例子: > myRe = /^1[0-9][0-9]$|^[0-9][0-9]$/; > myRe.exec(023); ["19"] > myRe.exec(052); ["42"] 023是一个数字,正则表达式对数

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

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

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

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

> myRe = /^1[0-9][0-9]$|^[0-9][0-9]$/;
> myRe.exec(023);
["19"]
> myRe.exec(052);
["42"]

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


您想改为执行myRe.exec(“023”)。此外,您可能希望修改正则表达式,以便两位数分支中的第一位数字和最后一个分支中的一位数字读取
[1-9]
,而不是
[0-9]
023
是一个数字,正则表达式对数字不起作用。因此JavaScript首先将数字转换为字符串。因为零,它是一个八进制数;所以023实际上是
2*8+3
,而不是
2*10+3

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

myRe.exec(023);
023
是一个八进制数。您要检查的是一个字符串。所以用引号括起来

/^1?\d{1,2}$/
-这是同一个正则表达式的一个更短、更可读的版本

/^1?\d?\d$/
,以您更喜欢的为准。

在表达式中

myRe.exec(023);
023
是一个八进制数。您要检查的是一个字符串。所以用引号括起来

/^1?\d{1,2}$/
-这是同一个正则表达式的一个更短、更可读的版本


或者
/^1?\d?\d$/
您更喜欢哪个。

您正在将RegExp应用于一个数字。regexp需要一个字符串参数

因此:

> myRe = /^1[0-9][0-9]$|^[0-9][0-9]$/;
> myRe.exec('023');
null
> myRe.exec('23');
["23"]
> myRe.exec('052');
null
> myRe.exec('52');
["52"]

正如所料。

您正在将RegExp应用于一个数字。regexp需要一个字符串参数

因此:

> myRe = /^1[0-9][0-9]$|^[0-9][0-9]$/;
> myRe.exec('023');
null
> myRe.exec('23');
["23"]
> myRe.exec('052');
null
> myRe.exec('52');
["52"]

正如预期的那样。

如果以0开始数字文字,它将被解释为八进制(以8为基数)。所以052(基数8)实际上是42(基数10)。然后转换为字符串(“42”)和正则表达式

就您的正则表达式而言:我将对其进行如下改进:

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

如果以0开始数字文字,它将被解释为八进制(以8为基数)。所以052(基数8)实际上是42(基数10)。然后转换为字符串(“42”)和正则表达式

就您的正则表达式而言:我将对其进行如下改进:

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

忽略八进制问题,为什么不检查数字是否小于999(即3长),然后检查第一个数字是否为1而不是0?这似乎比一个稍微不透明的正则表达式更简洁。@RichBradshaw这是一个关于JavaScript和正则表达式表单验证的赋值。感谢所有快速、有用的回复!啊,这是有道理的。但我不建议在现实生活中这样做。您知道您可以编写
,然后在新浏览器中,除非表单匹配,否则将不允许您提交表单吗?@RichBradshaw有趣!IE支持吗?忽略八进制问题,为什么不检查数字是否小于999(即3长),然后检查第一个是1而不是0?这似乎比一个稍微不透明的正则表达式更简洁。@RichBradshaw这是一个关于JavaScript和正则表达式表单验证的赋值。感谢所有快速、有用的回复!啊,这是有道理的。但我不建议在现实生活中这样做。您知道您可以编写
,然后在新浏览器中,除非表单匹配,否则将不允许您提交表单吗?@RichBradshaw有趣!这在IE中得到支持吗?