《正则表达式工作中的问题和经验》由会员分享,可在线阅读,更多相关《正则表达式工作中的问题和经验(1页珍藏版)》请在金锄头文库上搜索。
1、正则表达式工作中的问题和经验正则表达式工作中的问题和经验1.使用正则表达式判断交互输入使用正则表达式判断交互输入;问题问题:在输入的值里在输入的值里,可以简单的判断其范围可以简单的判断其范围,但有些时候还需要判断类型但有些时候还需要判断类型,避免因为输入错误造成脚本不能避免因为输入错误造成脚本不能执行执行,或错误执行等问题或错误执行等问题;示例示例:判断一个以判断一个以0 数字开头的数字组合数字开头的数字组合:if $1 = (1-90-9)*$ & $1 -le $max then.else.fi看上去这个判断没有什么问题看上去这个判断没有什么问题(事实上它的确可以实现事实上它的确可以实现)
2、,但在应用的时候发现但在应用的时候发现“在正常判断数字的时候没有在正常判断数字的时候没有问题问题,但在判断特殊字符的时候却出现问题但在判断特殊字符的时候却出现问题“.这会带来一个比较严重的安全问题这会带来一个比较严重的安全问题,如果我将这个代码写的很冗长如果我将这个代码写的很冗长,很难避免里面那个调用不会被利用很难避免里面那个调用不会被利用.问题就处在问题就处在“(1-90-9)*$“上上,在正则表达式里在正则表达式里“*“代表的是代表的是“匹配匹配 0 次或多次次或多次“.说明即使不输入说明即使不输入数字数字,只要不是字母只要不是字母,其它的输入也可能被调用其它的输入也可能被调用.如果简单的将如果简单的将“*“改为改为“+“则会造成不能输入个位数字的请款则会造成不能输入个位数字的请款.解决解决:解决的办法也很简单解决的办法也很简单,将将“(1-90-9)*$“改为改为“(1-9)1(0-9)*$“即可即可.这样就完全这样就完全匹配了输入的类型匹配了输入的类型.注注:zmt1982 兄说的对兄说的对,其实只需要其实只需要“1-90-9*$“(以以 1-9 数字开头数字开头,0-9 数字出现数字出现 0 次或多次次或多次为结尾为结尾)就可以了就可以了 俺是想的太多了俺是想的太多了.欢迎大家指正欢迎大家指正经验经验:别拿别拿 shell 不当干粮不当干粮.