李威 さぽている

小说翻译,日语相关转移至http://blog.hjenglish.com/liwei

正则表达式~~[8.9追加]

第一次作业时,判断数字那个方法就想到用正则了,可在MSDN里一看,Match只是在指定字符串里查找匹配表达式的部分,而我要的功能确是让字符串符合表达式,当时,感觉时间紧张,就此作罢~~

今天看到 检查用户名,密码,我又想起了正则。记忆中正则有这样的功能的啊,为何我就没找到相关方法呢?于是,今天又花时间看起了MSDN。功夫不负有心人,看到了^与$的功能,一头一尾,不就可以当完全匹配来用吗?于是,写了如下方法:

public static bool CheckPassword(string password)
        
{
            
return Regex.IsMatch(password, "^[0-9a-zA-Z]{6,16}$");
            
        }


public static bool CheckName(string name)
        
{
            
return Regex.IsMatch(name, "^[a-zA-Z]{1,20}$");
        }

再想下那个CheckNumber,不也能很快解决吗?
有兴趣的可以试着写一下~~


8.9追加
昨天写文时,有点晚了,所以COPY了已有的代码,就完结了,并没写出CheckNumber,回家时,仔细考虑了下,感觉也得花点时间才写的出来~~
今天看了cypha的文,地址如下:
http://www.blogjava.net/challenxing/archive/2006/08/09/62497.html
看他的表达式那么短,于是测试了下,有些方面没考虑到~~
如:开头多个0,结尾小数点等。
于是改进了下,附带一提,vs2005下需要两个“\”才不报错~~
(一篇文里不能用两次代码吗?点了居然没反应-_-|||)
public bool CheckNumber(String number)
        {
            return Regex.IsMatch(number, "^[-|+]?([1-9][0-9]*\\.?[0-9]+|0\\.[0-9]+)|[0-9]$");
        }

最后加了[0-9]是因为,前面一部分将一位数给忽略了~~
如有更简洁更好的表达式,望赐教~

posted on 2006-08-08 20:57 李威 阅读(347) 评论(3)  编辑  收藏

评论

# re: 正则表达式~~[8.9追加] 2006-08-09 15:26 茗香花神

先感谢李威兄弟,让我学到了新知识。

public bool CheckNumber(String number)
{
return Regex.IsMatch(number, "^[-|+]?([1-9][0-9]*\\.?[0-9]+|0\\.[0-9]+)|[0-9]$");
}
这个类是有bug的 11-1 11a 这些都会返回正确。
return Regex.IsMatch(number, "^[-|+]?(([1-9][0-9]*\\.?[0-9]+|0\\.[0-9]+)|[0-9])$");
加个括号就行了 如果不想输入2个\\在字符串前面+个"@",如下:
@"^[-|+]?([1-9][0-9]*\.?[0-9]+|0\.[0-9]+)|[0-9]$"






  回复  更多评论   

# re: 正则表达式~~[8.9追加] 2006-08-09 15:37 李威

感谢提醒~~最后的“|[0-9]”应该加到括号里~~马虎要不得啊
"^[-|+]?([1-9][0-9]*\\.?[0-9]+|0\\.[0-9]+|[0-9])$"

这个@非常耐看呀~~  回复  更多评论   

# re: 正则表达式~~[8.9追加] 2006-08-09 16:35 cypha

呵呵,这几点我也考虑到了,只是有些东西的定义不一样,在原来的一些老的计算器中(像8位的小计算器)是可以出现1.或者.111,不过这个是我在很小时玩的,不知到现在还能不能用这种不规范的用法了。  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: