请详细解释一下这个正则表达式

wxhysoftsodc 2011-03-03 01:36:22
表达式: ^\+?[1-9][0-9]*$

我想知道为什么0就被限制输入了。请详细分析一下。
...全文
176 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq454951240 2011-03-07
  • 打赏
  • 举报
回复
第一个^表示,其后的模式必须在字符串的开始处,最后一个$表示在结束处。+表示匹配前面的字符一次或多次,?表示匹配前面的字符一次或零次,也可以省略,【1-9】表示匹配1到9之间的任何一个字符【0-9】表示匹配0到9之间任何一个字符,*表示匹配前面的字符零次或多次。\好像在这里没有什么用处,这个正则就是匹配以非零开始的数字串的
VCACC 2011-03-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyazhe 的回复:]

^\+?[1-9][0-9]*$

-------------------
分解开是这及部分
^
\+?
[1-9]
[0-9]*
$
分别表示的意义如下
^ 因为没有模式修饰,这表示段落最开始。
\+? \表示取消转义,\+就表示加号,?表示0次或1次出现,这是贪婪匹配,先尝试存在+的情况。
[1-9] ……
[/Quote]

这个够清楚。
wxhysoftsodc 2011-03-04
  • 打赏
  • 举报
回复
<asp:TextBox runat="server" ID="txtAccountNumber" CausesValidation="true" Regex="^\+?[1-9][0-9]*$" MaxLength="50">

测试就是运行的时候键盘输入数据。
兔子-顾问 2011-03-04
  • 打赏
  • 举报
回复
贴出你的测试代码和输出结果。
兔子-顾问 2011-03-04
  • 打赏
  • 举报
回复
1230很正常。说的是单独一个0不可以。你测试过么?你如何测试1230不可以的?
wxhysoftsodc 2011-03-04
  • 打赏
  • 举报
回复
就是应为测试输入1230不成功,所以才怀疑自己对于这个正则表达式理解错了。
兔子-顾问 2011-03-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wxhysoftsodc 的回复:]

引用 7 楼 wuyazhe 的回复:
不是给你说了么,你断章取义啊。前面你写了一个[1-9]

[1-9][0-9]

前面是[1-9]但是后面还是有[0-9],后面[0-9]不就允许输入0了么。
按原理也就是可以输入1230 这样的数字。要么就是我理解错了。
但是事实上,只能输入123,后面的0没法输入。
[/Quote]

1230很正常。说的是单独一个0不可以。你测试过么?你如何测试1230不可以的?
wxhysoftsodc 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wuyazhe 的回复:]
不是给你说了么,你断章取义啊。前面你写了一个[1-9]
[/Quote]
[1-9][0-9]

前面是[1-9]但是后面还是有[0-9],后面[0-9]不就允许输入0了么。
按原理也就是可以输入1230 这样的数字。要么就是我理解错了。
但是事实上,只能输入123,后面的0没法输入。
兔子-顾问 2011-03-03
  • 打赏
  • 举报
回复
不是给你说了么,你断章取义啊。前面你写了一个[1-9]
wxhysoftsodc 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyazhe 的回复:]
^\+?[1-9][0-9]*$

-------------------
分解开是这及部分
^
\+?
[1-9]
[0-9]*
$
分别表示的意义如下
^ 因为没有模式修饰,这表示段落最开始。
\+? \表示取消转义,\+就表示加号,?表示0次或1次出现,这是贪婪匹配,先尝试存在+的情况。
[1-9] 范围捕获,匹配1-9……
[/Quote]

[0-9]* 范围捕获,匹配任意数字,可以不存在,贪婪模式,0次或多次。
-----------匹配任意数字,也就是说可以有0.但是我用的时候,0无法输入。

wxhysoftsodc 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ybh37 的回复:]
http://www.yesky.com/imagesnew/software/vbscript/html/jsgrpRegExpSyntax.htm

匹配第一个字符是1到9的数字,后面的一到多个字符是0到9的一个字符串
[/Quote]
我原以为也是这样的。但是使用的时候发现,0根本输入不了。不管是在最前面还是中间或者最后面。
xugan666 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyazhe 的回复:]
^\+?[1-9][0-9]*$

-------------------
分解开是这及部分
^
\+?
[1-9]
[0-9]*
$
分别表示的意义如下
^ 因为没有模式修饰,这表示段落最开始。
\+? \表示取消转义,\+就表示加号,?表示0次或1次出现,这是贪婪匹配,先尝试存在+的情况。
[1-9] 范围捕获,匹配1-9……
[/Quote]


+1
兔子-顾问 2011-03-03
  • 打赏
  • 举报
回复
^\+?[1-9][0-9]*$

-------------------
分解开是这及部分
^
\+?
[1-9]
[0-9]*
$
分别表示的意义如下
^ 因为没有模式修饰,这表示段落最开始。
\+? \表示取消转义,\+就表示加号,?表示0次或1次出现,这是贪婪匹配,先尝试存在+的情况。
[1-9] 范围捕获,匹配1-9的数字
[0-9]* 范围捕获,匹配任意数字,可以不存在,贪婪模式,0次或多次。
$ 同^,没有模式修饰,表示段落结束。

你如果希望0也可以被匹配,可以这样试试。
^\+?(?!0\d)\d+$
也顺手给你解释一下
分解
^
\+?
(?!0\d)
\d+
$
每项意义
^ 文本开始
\+? 存在或不存在都可以,匹配一个+字符。
(?!0\d) 环视,描述+后面不能出现01,02,03,00等0开头第二个是数字的情况。
\d+ \d表示数字+表示至少有一个数字,多多益善,贪婪匹配。
$ 文本结束
  • 打赏
  • 举报
回复
第一个^表示,其后的模式必须在字符串的开始处,最后一个$表示在结束处。+表示匹配前面的字符一次或多次,?表示匹配前面的字符一次或零次,也可以省略,【1-9】表示匹配1到9之间的任何一个字符【0-9】表示匹配0到9之间任何一个字符,*表示匹配前面的字符零次或多次。\好像在这里没有什么用处,这个正则就是匹配以非零开始的数字串的。
咸清 2011-03-03
  • 打赏
  • 举报
回复
http://www.yesky.com/imagesnew/software/vbscript/html/jsgrpRegExpSyntax.htm

匹配第一个字符是1到9的数字,后面的一到多个字符是0到9的一个字符串

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧