首页 新闻 会员 周边

正则表达式问题

0
[已解决问题] 解决于 2012-03-09 08:39

/^\w[12]\d{8}$/   这是一个台湾身份证号的正则表达式,解释下\w[12]的意思?\w等价于[a-zA-Z0-9_],[12]是匹配所包含的任意一个字符,我要验证的号码为a211336196,这个验证成功了,但是我把[12]换成[5],把“a211336196”改成“511336196”就又验证失败了,为什么呢?这里就成了输入一位和输入两位的问题了,没想明白!

as、的主页 as、 | 初学一级 | 园豆:96
提问于:2012-03-08 16:37
< >
分享
最佳答案
0

511336196当然会配置失败,你可以这样,从后面往前面看,d{8}匹配的是11336196,然后前面就剩了一个5,5是不能匹配[12]的

artwl | 专家六级 |园豆:16736 | 2012-03-08 17:37

你没看清楚我的问题,我把[12]改成[5]了

as、 | 园豆:96 (初学一级) | 2012-03-08 17:39

我把/^\w[12]\d{8}$/改成了/^\w[5]\d{8}$/,然后把要验证的“a211336196”改成“511336196”就又验证失败了

as、 | 园豆:96 (初学一级) | 2012-03-08 17:41

@as、: 少了一位啊,\w没有匹配的

artwl | 园豆:16736 (专家六级) | 2012-03-08 17:41

@artwl: 意思就是说必须要两位才可以对把?那为什么一位就错呢?

as、 | 园豆:96 (初学一级) | 2012-03-08 17:45

@as、: 改成了[5],要验证的511336196里面的第一个不是5吗?为什么说没有匹配呢?

as、 | 园豆:96 (初学一级) | 2012-03-08 17:46

@as、: 不是的,这要看你的需求了,可以用 *+?来控制的

artwl | 园豆:16736 (专家六级) | 2012-03-08 17:47

@artwl: 改成了[5],要验证的511336196里面的第一个不是5吗?为什么说没有匹配呢?

as、 | 园豆:96 (初学一级) | 2012-03-08 17:48

@artwl: 

$str='66';
if(preg_match("/^\b\w[6]\b$/",$str))

看这个例子   要是验证$str='66';就能验证成功,要是验证$str='6';就验证失败!

as、 | 园豆:96 (初学一级) | 2012-03-08 17:51

@artwl: 能解释下\w[6]的意思吗?

as、 | 园豆:96 (初学一级) | 2012-03-08 17:53

@as、: \w就是匹配[a-zA-Z0-9_]所包含的一个字行,[6]就是匹配数字6

artwl | 园豆:16736 (专家六级) | 2012-03-08 17:58

@artwl: 那为什么我验证一个6就不行呢?

as、 | 园豆:96 (初学一级) | 2012-03-08 17:58

@artwl: 有点愚钝,莫怪撒、

as、 | 园豆:96 (初学一级) | 2012-03-08 17:59

@as、: 你这里 \w 并不是可选的,也就是说是必段匹配的,如果要可选可以写成这样 \w* 就可以了

artwl | 园豆:16736 (专家六级) | 2012-03-08 18:01

@artwl: 如果说我一定要写成[6]这样的呢?就只能验证两位数的吗?还是说??????

as、 | 园豆:96 (初学一级) | 2012-03-08 18:04

@as、:  你的需求是什么?

你试试这个吧 \w?[6]

artwl | 园豆:16736 (专家六级) | 2012-03-08 18:05

@artwl: 我又把它改成是\w[123],验证的必须是$str[12],才会成功,如果要是验证$str[1],那就是失败了。

as、 | 园豆:96 (初学一级) | 2012-03-08 18:06

@as、: 不知道你的需求是什么,建议看看《精通正则表达式》这本书

artwl | 园豆:16736 (专家六级) | 2012-03-08 18:07

@artwl: 我就是把一个例子给改成自己所想的,代码如下:

$str='6';
if(preg_match("/^\b\w[6]\b$/",$str))
{
    echo "验证成功!";
}
else
{
    echo "验证失败!";
}
?>

然后我只想验证$str='6';但是验证是失败的,如果我验证$str='66';就能验证成功!

as、 | 园豆:96 (初学一级) | 2012-03-08 18:10

@as、: 用\w?[6]吧

artwl | 园豆:16736 (专家六级) | 2012-03-08 18:11
其他回答(3)
0

匹配失败应该是第二个数字5的问题,第二个数字是1或者2

http://regexr.com?308nl

OOLi | 园豆:163 (初学一级) | 2012-03-08 16:59

问题重新修改了  刚刚讲错了,再帮忙看看!

支持(0) 反对(0) as、 | 园豆:96 (初学一级) | 2012-03-08 17:17

@as、: 

把[12]换成[5],第二位就是5

\d{8}表示后面还有8位数

支持(0) 反对(0) OOLi | 园豆:163 (初学一级) | 2012-03-08 17:41
0

[12]匹配1或2

你要想限定\w的个数,用\w{n}

YuxuanWang | 园豆:210 (菜鸟二级) | 2012-03-08 17:36
0

学习了。。。

KivenRo | 园豆:1734 (小虾三级) | 2012-03-08 20:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册