??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲免费视频观看,亚洲精品福利你懂,亚洲一区二区三区久久http://www.tkk7.com/myblogs/E序 人生zh-cnSun, 11 May 2025 05:54:41 GMTSun, 11 May 2025 05:54:41 GMT60一个老程序员的心里话说到人的心坎http://www.tkk7.com/myblogs/archive/2006/09/07/68180.htmlE序-人生E序-人生Thu, 07 Sep 2006 01:35:00 GMThttp://www.tkk7.com/myblogs/archive/2006/09/07/68180.htmlhttp://www.tkk7.com/myblogs/comments/68180.htmlhttp://www.tkk7.com/myblogs/archive/2006/09/07/68180.html#Feedback0http://www.tkk7.com/myblogs/comments/commentRss/68180.htmlhttp://www.tkk7.com/myblogs/services/trackbacks/68180.html一个老程序员的心里话说到人的心坎

                                                                                                            来源于:http://ronghuicoffee.spaces.msn.com/blog/cns!3DC6B634723CEECE!124.entry

怽Q咱当电子工E师也是十余q了Q不有出息Q环֛周,也没有看见几个有出息的!回顾工程师生涯,感慨万千Q愿意讲几句掏心H子的话Q也给׃师弟师妹们提个醒Q希望他们比׃强!

[1]好好规划自己的\Q不要跟着感觉赎ͼҎ个h的理惛_{安排,l大部分人ƈ不指望成Z么院士或教授Q而是希望zd滋润一些,爽一些。那么,需要慎重安排自q轨迹。从哪个行业入手Q逐渐对该行业深入了解Q不要频J蟩槽,特别是不要ؓ了一点工资而{U阵圎ͼ从长q看Q这炚wҎ不算什么,当你对一个行业有那么几年的体会,以后钱根本不是问题。频J地动荡不是上策Q最后你对哪个行业都没有摔R,永远是新手! 
  

[2]可以做技术,切不可沉湎于技术。千万不可一门心思钻研技术!l自己很大压力,如果你的心思全部放在这上面Q那么注定你成为孔乙己一cȝ人物Q适可而止ZQ因为技术只不过是你今后前途的支柱之一Q而且q不是最大的支柱Q除非你只愿意到老还是个工程师!   

[3]不要d技术高手,只去做综合素质高手!在企业里P我们时常瞧不h人,说他“什么都不懂Q凭啥拿那么多钱Q凭啥升官!”这是普遍的典型的工E师的迂腐之a?051很牛吗?人家能上d然有他的本事Q而且是你没有的本事。你xQ老板搞经营那么多q_N见识不如你这个新兵?人家或许善于理Q善于领会老板意图Q善于部门协调等{。因此务必培养自己多斚w的能力,包括理Q亲和力Q察a观色能力Q攻兌力等Q要成ؓl合素质的高手,则前途无量,否则只能w在角落看示波器Q技术以外的技能才是更重要的本事!Q从古到今,国***Q一律如此!   

[4]多交C会三教九流的朋友!不要只和工程师交往Q认为有共同语言Q其实更重要的是和其他类人物交往Q如果你希望有朝一日当老板或高层管理,那么你整日面对的是q些人。了解他们的l历Q思维习惯Q爱好,学习他们处理问题的模式,了解C会各个角落的现象和问题Q这是以后发展的巨大的本钱,没有q些以后׃W手W脚Q跌跌撞撞,遇到重重困难Q交不少学费Q成功的概率大大降低Q?

[5]知识涉猎不一定专Q但一定要q!多看看其他方面的书,金融Q胦会,q出口,E务Q法律等{,Z后做一些积累,以后的用处会更大Q会交许多学费Q! 

[6]抓住时机向技术管理或市场销售方面的转变Q要x前途就不能一直搞开发,适当时候要转变为管理或销售,前途会更大Q以前搞技术也没有白搞Q以后还用得着。搞理可以培养自己的领D力,搞销售可以培养自q市场概念和思维Q同时ؓ自己以后发展U篏庞大的h脉!应该说这才是前途的真正支柱Q!Q   

[7]逐渐克服自己的心里弱点和性格~陷Q多疑,敏感Q天真(贬义Qƈ不可爱)Q犹豫不冻I胆怯,多虑Q脸皮太薄,心不够黑Q教条式思维。。。这些工E师普遍存在的性格q必须改变Q很隑֐Q只在床上想一惛_然不可能Q去帮朋友守一个月地摊Q包准有效果Q去实践Q而不要只惻I不克服这些缺点,一切不可能Q甚臌目l理都当不好--管你可能技术不错!   

[8]工作的同时要Z后做准备Q徏立自q工作环境Q及早ؓ自己配置一个工作环境,装备电脑Q示波器Q可以买个二手的Q,仿真器,~程器等Q业余可以接ҎQ一斚w接触市场Q培d场感觉,同时也积累资金,更重要的是准备自q产品Q咱搞技术的没有钱,只有技术,技术的代表不是学历和证书,而是产品Q拿L产品Q就可技术{让或与h合作搞企业!先把东西准备好,{待ZQ否则,有了Z也抓不住Q   

[9]要学会善于推销自己Q不仅要能干Q还要能_能写Q善于利用一切机会推销自己Q树立自q品牌形象Q很必要Q要创造条件让别h了解自己Q不然老板怎么知道你能qԌ外面的投资h怎么怿你?提早把自己推销出去Q机会自然会来找你!搞个个h主页是个好注意!Q特别是培养自己在行业的名气Q有了名气,高薪Z自不在话下,更重要的是有合作的机?..   

[10]该出手时便出手!永远不可能有100%把握Q!Q条件差不多p大胆dQ去闯出自己的事业,不要犹UQ不要彷徨,q了不一定成功,但至ؓ下一ơ冲ȝ累了l验Q不q永q没出息Q而且要干成必然要l历p|。不l历风雨Q怎么见彩虹,没有随随便便成功Q?/p>

来源Q?a >http://ronghuicoffee.spaces.msn.com/blog/cns!3DC6B634723CEECE!124.entry



E序-人生 2006-09-07 09:35 发表评论
]]>
一个完整的日期实现c?/title><link>http://www.tkk7.com/myblogs/archive/2006/06/30/55863.html</link><dc:creator>E序-人生</dc:creator><author>E序-人生</author><pubDate>Fri, 30 Jun 2006 02:04:00 GMT</pubDate><guid>http://www.tkk7.com/myblogs/archive/2006/06/30/55863.html</guid><wfw:comment>http://www.tkk7.com/myblogs/comments/55863.html</wfw:comment><comments>http://www.tkk7.com/myblogs/archive/2006/06/30/55863.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/myblogs/comments/commentRss/55863.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/myblogs/services/trackbacks/55863.html</trackback:ping><description><![CDATA[ <p>一个完整的日期实现c?/p> <p>package com.nyhr.util;</p> <p>import java.util.GregorianCalendar;<br />import java.text.DateFormat;<br />import java.text.SimpleDateFormat;<br />import java.util.Date;<br />import java.util.Locale;<br />import java.util.Calendar;</p> <p>/**<br /> * <p>Title: 日期旉处理</p><br /> * <p>Description: 工具c?lt;/p><br /> * <p>Copyright: Copyright (c) 2005</p><br /> * <p><br /> * @version 1.0<br /> * @author <br /> */<br />public class DateUtil<br />{<br />    /**<br />     * ~省的DateFormat对象Q可以将一个java.util.Date格式化成yyyy-mm-dd输出<br />     */<br />    private static DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.SIMPLIFIED_CHINESE);</p> <p>    /**<br />     * U有构造函?br />     */<br />    private DateUtil()<br />    {<br />    }</p> <p>    /**<br />     * <p>q回一个当前的旉Qƈ按格式{换ؓ字符?lt;/p><br />     * 例:17:27:03<br />     * @return String<br />     */<br />    public static String getNowTime()<br />    {<br />        GregorianCalendar gcNow = new GregorianCalendar();<br />        java.util.Date dNow = gcNow.getTime();<br />        DateFormat df = DateFormat.getTimeInstance(DateFormat.MEDIUM, Locale.SIMPLIFIED_CHINESE);<br />        return df.format(dNow);<br />    }</p> <p>    /**<br />     * <p>q回一个当前日期,q按格式转换为字W串</p><br />     * 例:2004-4-30<br />     * @return String<br />     */<br />    public static String getNowDate()<br />    {<br />        GregorianCalendar gcNow = new GregorianCalendar();<br />        java.util.Date dNow = gcNow.getTime();<br />        DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.SIMPLIFIED_CHINESE);<br />        return df.format(dNow);<br />    }</p> <p>    /**<br />     * <p>q回一个当前日期和旉Qƈ按格式{换ؓ字符?lt;/p><br />     * 例:2004-4-30 17:27:03<br />     * @return String<br />     */<br />    public static String getNowDateTime()<br />    {<br />        GregorianCalendar gcNow = new GregorianCalendar();<br />        java.util.Date dNow = gcNow.getTime();<br />        DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, Locale.SIMPLIFIED_CHINESE);<br />        return df.format(dNow);<br />    }</p> <p>    /**<br />     * <p>q回当前q?lt;/p><br />     * @return int<br />     */<br />    public static int getThisYear()<br />    {<br />        GregorianCalendar gcNow = new GregorianCalendar();<br />        return gcNow.get(GregorianCalendar.YEAR);<br />    }</p> <p>    /**<br />     * q回本月<br />     * @return int<br />     */<br />    public static int getThisMonth()<br />    {<br />        GregorianCalendar gcNow = new GregorianCalendar();<br />        return gcNow.get(GregorianCalendar.MONTH) + 1;<br />    }</p> <p>    /**<br />     * q回今天是本月的W几?br />     * @return int ?开?br />     */<br />    public static int getToDayOfMonth()<br />    {<br />        GregorianCalendar gcNow = new GregorianCalendar();<br />        return gcNow.get(GregorianCalendar.DAY_OF_MONTH);<br />    }<br />    /**<br />     * q回当前的小?br />     * @return int <br />     */<br />    public static int getHour()<br />    {<br />      GregorianCalendar gcNow = new GregorianCalendar();<br />         return gcNow.get(GregorianCalendar.HOUR);<br />    }<br />    /**<br />     * q回当前的分?br />     * @return int q回当前的分?br />     */<br />    public static int getMinute()<br />    {<br />      GregorianCalendar gcNow = new GregorianCalendar();<br />         return gcNow.get(GregorianCalendar.MINUTE);<br />    }<br />    /**<br />     * q回当前的秒?br />     * @return int W几U?br />     */<br />    public static int getSecond()<br />    {<br />      GregorianCalendar gcNow = new GregorianCalendar();<br />         return gcNow.get(GregorianCalendar.SECOND);<br />    }<br />    /**<br />     * q回今天是本q的W几?<br />     * @return int ?开?br />     */<br />     <br />    public static int getToWeekOfYear()<br />    {<br />     GregorianCalendar gcNow = new GregorianCalendar();<br />     return gcNow.get(GregorianCalendar.WEEK_OF_YEAR);<br />    }<br />    /**<br />     * q回一格式化的日期<br />     * @param time long<br />     * @return String yyyy-mm-dd 格式<br />     */<br />    public static String formatDate(java.util.Date date)<br />    {<br />        if (date == null) return "";<br />        else return df.format(date);<br />    }</p> <p>    /**<br />     * q回一格式化的日期<br />     * @param time long<br />     * @return String 2005-6-17 格式<br />     */<br />    public static String formatSDate(java.util.Date date)<br />    {<br />        if (date == null) return "";<br />        else<br />        {<br />            SimpleDateFormat bartDateFormat = new SimpleDateFormat("yyyy-M-d HH:mm:ss");<br />            return bartDateFormat.format(date);<br />        }<br />    }</p> <p>    /**<br />     * q回已添加指定时间间隔的日期<br />     * @param interval  表示要添加的旉间隔("y":q?"d":?"m":?如有必要可以自行增加)<br />     * @param number    表示要添加的旉间隔的个?br />     * @param date      java.util.Date()<br />     * @return String   2005-5-12格式的日期字?br />     */<br />    public static String dateAdd(String interval, int number,<br />            java.util.Date date)<br />    {<br />        String strTmp = "";<br />        GregorianCalendar gc = new GregorianCalendar();<br />        gc.setTime(date);<br />        //加若q年<br />        if (interval.equals("y"))<br />        {<br />            int currYear = gc.get(Calendar.YEAR);<br />            gc.set(Calendar.YEAR, currYear + number);<br />        }<br />        //加若q月<br />        else if (interval.equals("m"))<br />        {<br />            int currMonth = gc.get(Calendar.MONTH);<br />            gc.set(Calendar.MONTH, currMonth + number);<br />        }<br />        //加若q天<br />        else if (interval.equals("d"))<br />        {<br />            int currDay = gc.get(Calendar.DATE);<br />            gc.set(Calendar.DATE, currDay + number);<br />        }<br />        //加若时<br />        else if (interval.equals("h"))<br />        {<br />            int currDay = gc.get(Calendar.HOUR);<br />            gc.set(Calendar.HOUR, currDay + number);<br />        }<br />        SimpleDateFormat bartDateFormat = new SimpleDateFormat("yyyy-M-d HH:mm:ss");<br />        strTmp = bartDateFormat.format(gc.getTime());<br />        return strTmp;<br />    }</p> <p>    /**<br />     * <p>q回两个日期之间的单位间隔数</p><br />     * @param a java.util.Date<br />     * @param b java.util.Date<br />     * @return int 间隔?br />     */<br />    public static int dateDiff(java.util.Date a, java.util.Date b)<br />    {<br />        int tempDifference = 0;<br />        int difference = 0;<br />        Calendar earlier = Calendar.getInstance();<br />        Calendar later = Calendar.getInstance();</p> <p>        if (a.compareTo(b) < 0)<br />        {<br />            earlier.setTime(a);<br />            later.setTime(b);<br />        }<br />        else<br />        {<br />            earlier.setTime(b);<br />            later.setTime(a);<br />        }</p> <p>        while (earlier.get(Calendar.YEAR) != later.get(Calendar.YEAR))<br />        {<br />            tempDifference = 365 * (later.get(Calendar.YEAR) - earlier.get(Calendar.YEAR));<br />            difference += tempDifference;</p> <p>            earlier.add(Calendar.DAY_OF_YEAR, tempDifference);<br />        }</p> <p>        if (earlier.get(Calendar.DAY_OF_YEAR) != later.get(Calendar.DAY_OF_YEAR))<br />        {<br />            tempDifference = later.get(Calendar.DAY_OF_YEAR)<br />                    - earlier.get(Calendar.DAY_OF_YEAR);<br />            difference += tempDifference;</p> <p>            earlier.add(Calendar.DAY_OF_YEAR, tempDifference);<br />        }</p> <p>        return difference;<br />    }</p> <p>/**<br />     * <p>该方法是获得到每?h期一的数?lt;/p><br />     * @return -q回一个数?br />     */<br />    /**<br />     * <p>该方法是获得到每?h期一的数?lt;/p><br />     * @return -q回一个数?br />     */<br />    public static int getDate(int curYear,int curMonth ,int curDate)<br />    {<br />     int day1 = 0;<br />     Calendar cal = Calendar.getInstance(); <br />     cal.clear(); <br />     cal.set(curYear,curMonth-1,curDate); <br />     int dayOfWeek = cal.get(cal.DAY_OF_WEEK);      <br />     System.out.println("curDate="+curDate +" dayOfWeek "+dayOfWeek);<br />     switch(dayOfWeek)<br />     {<br />      case 1:   //星期?br />       day1=0;<br />       break;<br />      case 2:   //星期一<br />       day1=1;<br />       break;<br />      case 3:   //星期?br />       day1=2;<br />       break;<br />      case 4:   //星期?br />       day1=3;<br />       break;<br />      case 5:   //星期?br />       day1=4;<br />       break;<br />      case 6:   //星期?br />       day1=5;<br />       break;<br />      case 7:   //星期?br />       day1=6;<br />       break;<br />     }  <br />     return day1;<br />    } <br />    public static String checkTime(int id)<br />    {<br />        String bol = "";<br />        Calendar tt = Calendar.getInstance();      <br />        String currDate=getNowDate();    <br />       System.out.println("currDate="+currDate);<br />        int result = tt.get(Calendar.DAY_OF_WEEK);<br />  <br />        int shour = tt.get(Calendar.HOUR_OF_DAY);<br />        <br />        if (id == 3)<br />        {<br />            switch (result)<br />            {<br />                case 1:<br />                    break;<br />                case 7:<br />                    if ((shour >= 8) && (shour < 12))<br />                    {<br />                        bol = "disabled";<br />                        break;<br />                    }<br />                default:<br />                    if ((shour >= 8) && (shour < 12))<br />                    {<br />                        bol = "disabled";<br />                        break;<br />                    }<br />                    else if ((shour >= 14) && (shour < 17))<br />                    {<br />                        bol = "disabled";<br />                        break;<br />                    }<br />            }<br />        }<br />        return bol;<br />    }<br />    /**<br />     * <p>该方法是字W型转变成日期型</p><br />     * @param strX -传入字符cd<br />     * @return -q回日期cd <br />     */<br />    public static Date getStrDate(String strX)<br />    {<br />     Date date1=new Date();<br />     if (!strX.equals(""))<br />     {<br />      try<br />      {<br />       date1=(DateFormat.getDateInstance()).parse(strX);<br />      }<br />      catch(Exception ex)<br />      {<br />       Debug.log("hhh","getStrDate()",ex.toString());<br />       //System.out.println(ex.toString());<br />      }<br />     }<br />     else<br />     {<br />       GregorianCalendar gcNow = new GregorianCalendar();<br />           date1 = gcNow.getTime();<br />     }<br />     <br />     return date1;<br />    }<br />    <br />    /**<br />     * <p>比较两日期字W串的大?lt;/p><br />     * @param d1<br />     * @param d2<br />     * @return (d1>d2)?2:(d1=d2)?1:0<br />     */<br />    public static int compareDate(String d1, String d2)<br />    {<br />     short vl = 1;<br />     GregorianCalendar gc = new GregorianCalendar();<br />        gc.setTime(getStrDate(d1));<br />        int year = gc.get(GregorianCalendar.YEAR);<br />        int month = gc.get(GregorianCalendar.MONTH);<br />        int day = gc.get(GregorianCalendar.DAY_OF_MONTH);<br />        gc.setTime(getStrDate(d2));<br />        int tempYear = gc.get(GregorianCalendar.YEAR);<br />        int tempMonth = gc.get(GregorianCalendar.MONTH);<br />        int tempDay = gc.get(GregorianCalendar.DAY_OF_MONTH);<br />        if(year !=  tempYear)<br />        {<br />         if (year>tempYear)<br />          vl = 2;<br />         else<br />          vl = 0;<br />        }<br />        else<br />        {<br />         if (month != tempMonth)<br />         {<br />          if(month>tempMonth)<br />           vl = 2;<br />          else<br />           vl = 0;<br />         }<br />         else<br />         {<br />          if (day != tempDay)<br />          {<br />           if (day > tempDay)<br />            vl = 2;<br />              else<br />               vl = 0;<br />          }<br />         }<br />        }<br />        return vl;<br />    }<br />    <br />}<br /></p> <img src ="http://www.tkk7.com/myblogs/aggbug/55863.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/myblogs/" target="_blank">E序-人生</a> 2006-06-30 10:04 <a href="http://www.tkk7.com/myblogs/archive/2006/06/30/55863.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>|页制作之在U视频播放代?/title><link>http://www.tkk7.com/myblogs/archive/2006/06/29/55783.html</link><dc:creator>E序-人生</dc:creator><author>E序-人生</author><pubDate>Thu, 29 Jun 2006 08:59:00 GMT</pubDate><guid>http://www.tkk7.com/myblogs/archive/2006/06/29/55783.html</guid><wfw:comment>http://www.tkk7.com/myblogs/comments/55783.html</wfw:comment><comments>http://www.tkk7.com/myblogs/archive/2006/06/29/55783.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/myblogs/comments/commentRss/55783.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/myblogs/services/trackbacks/55783.html</trackback:ping><description><![CDATA[现在把一些不同格式的视频文g的网代码ȝ如下,希望对大家用所帮助.使用Ҏ说明:你应该把下面代码中的视频路径换成与你|站中内容相适应的相对\径或者绝对\?播放器的H口大小可以修改高和宽的参数. <ul><strong>1.avi格式 </strong><p><object id="video" width="400" height="200" border="0" classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"><br /><param name="ShowDisplay" value="0"><br /><param name="ShowControls" value="1"><br /><param name="AutoStart" value="1"><br /><param name="AutoRewind" value="0"><br /><param name="PlayCount" value="0"><br /><param name="Appearance value="0 value="""><br /><param name="BorderStyle value="0 value="""><br /><param name="MovieWindowHeight" value="240"><br /><param name="MovieWindowWidth" value="320"><br /><param name="FileName" value="http://www.jianzhan8.cn/sample.avi"><br /><embed width="400" height="200" border="0" showdisplay="0" showcontrols="1" autostart="1" autorewind="0" playcount="0" moviewindowheight="240" moviewindowwidth="320" filename="http://www.jianzhan8.cn/sample.avi" src="<span id="y8y8gc0" class="style3">sample.avi</span>"><br /></embed> <br /></object></p></ul><ul><strong>2.mpg格式</strong><p><object classid="clsid:05589FA1-C356-11CE-BF01-00AA0055595A" id="ActiveMovie1" width="239" height="250"><br /><param name="Appearance" value="0"><br /><param name="AutoStart" value="-1"><br /><param name="AllowChangeDisplayMode" value="-1"><br /><param name="AllowHideDisplay" value="0"><br /><param name="AllowHideControls" value="-1"><br /><param name="AutoRewind" value="-1"><br /><param name="Balance" value="0"><br /><param name="CurrentPosition" value="0"><br /><param name="DisplayBackColor" value="0"><br /><param name="DisplayForeColor" value="16777215"><br /><param name="DisplayMode" value="0"><br /><param name="Enabled" value="-1"><br /><param name="EnableContextMenu" value="-1"><br /><param name="EnablePositionControls" value="-1"><br /><param name="EnableSelectionControls" value="0"><br /><param name="EnableTracker" value="-1"><br /><param name="Filename" value="<span id="80u000m" class="style3">http://www.jianzhan8.cn/sample.mpg</span>" valuetype="ref"><br /><param name="FullScreenMode" value="0"><br /><param name="MovieWindowSize" value="0"><br /><param name="PlayCount" value="1"><br /><param name="Rate" value="1"><br /><param name="SelectionStart" value="-1"><br /><param name="SelectionEnd" value="-1"><br /><param name="ShowControls" value="-1"><br /><param name="ShowDisplay" value="-1"><br /><param name="ShowPositionControls" value="0"><br /><param name="ShowTracker" value="-1"><br /><param name="Volume" value="-480"><br /></object></p></ul><ul><strong>3.rm格式 </strong><p><OBJECT ID=video1 CLASSID="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" HEIGHT=288 WIDTH=352> <param name="_ExtentX" value="9313"><br /><param name="_ExtentY" value="7620"><br /><param name="AUTOSTART" value="0"><br /><param name="SHUFFLE" value="0"><br /><param name="PREFETCH" value="0"><br /><param name="NOLABELS" value="0"><br /><param name="SRC" value="rtsp://203.207.131.35/vod/dawan-a.rm";><br /><param name="CONTROLS" value="ImageWindow"><br /><param name="CONSOLE" value="Clip1"><br /><param name="LOOP" value="0"><br /><param name="NUMLOOP" value="0"><br /><param name="CENTER" value="0"><br /><param name="MAINTAINASPECT" value="0"><br /><param name="BACKGROUNDCOLOR" value="#000000"><embed SRC type="audio/x-pn-realaudio-plugin" CONSOLE="Clip1" CONTROLS="ImageWindow" HEIGHT="288" WIDTH="352" AUTOSTART="false"> </OBJECT> </p></ul><ul><strong>4.wmv格式 </strong><p><object id="NSPlay" width=200 height=180 classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715" standby="Loading Microsoft Windows Media Player components..." type="application/x-oleobject" align="right" hspace="5"><br /><!-- ASX File Name --><br /><param name="AutoRewind" value=1><br /><param name="FileName" value="xxxxxx.wmv"><br /><!-- Display Controls --><br /><param name="ShowControls" value="1"><br /><!-- Display Position Controls --><br /><param name="ShowPositionControls" value="0"><br /><!-- Display Audio Controls --><br /><param name="ShowAudioControls" value="1"><br /><!-- Display Tracker Controls --><br /><param name="ShowTracker" value="0"><br /><!-- Show Display --><br /><param name="ShowDisplay" value="0"><br /><!-- Display Status Bar --><br /><param name="ShowStatusBar" value="0"><br /><!-- Diplay Go To Bar --><br /><param name="ShowGotoBar" value="0"><br /><!-- Display Controls --><br /><param name="ShowCaptioning" value="0"><br /><!-- Player Autostart --><br /><param name="AutoStart" value=1><br /><!-- Animation at Start --><br /><param name="Volume" value="-2500"><br /><param name="AnimationAtStart" value="0"><br /><!-- Transparent at Start --><br /><param name="TransparentAtStart" value="0"><br /><!-- Do not allow a change in display size --><br /><param name="AllowChangeDisplaySize" value="0"><br /><!-- Do not allow scanning --><br /><param name="AllowScan" value="0"><br /><!-- Do not show contect menu on right mouse click --><br /><param name="EnableContextMenu" value="0"><br /><!-- Do not allow playback toggling on mouse click --><br /><param name="ClickToPlay" value="0"><br /></object><br /></p></ul><ul><strong>5:最单的播放代码 </strong><p><embed src="http://www.jianzhan8.cn/sample.wmv" autostart="true" loop="true" width="200" height="150" > <br />把这个网址http://www.jianzhan8.cn/sample.wmv换成你要看的电媄p?</p></ul><ul><strong>6:有图像的rm格式</strong><p><OBJECT classid=clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA height=288 id=video1 width=305 VIEWASTEXT><br /><param name=_ExtentX value=5503><br /><param name=_ExtentY value=1588><br /><param name=AUTOSTART value=-1><br /><param name=SHUFFLE value=0><br /><param name=PREFETCH value=0><br /><param name=NOLABELS value=0><br /><param name=SRC value=http://www.jianzhan8.cn/sample.ram><br /><param name=CONTROLS value=Imagewindow,StatusBar,ControlPanel><br /><param name=CONSOLE value=RAPLAYER><br /><param name=LOOP value=0><br /><param name=NUMLOOP value=0><br /><param name=CENTER value=0><br /><param name=MAINTAINASPECT value=0><br /><param name=BACKGROUNDCOLOR value=#000000><br /></OBJECT><br /></p></ul><ul><strong>7:无图像的rm格式Q?如相壎ͼ歌曲...) </strong><p><object ID=video2 WIDTH=300 HEIGHT=62 CLASSID=CLSID:CFCDAA03-8BE4-11CF-B84B-0020AFBBCCFA><br /><param name=_ExtentX value=9657><br /><param name=_ExtentY value=847><br /><param name=AUTOSTART value=-1><br /><param name=SHUFFLE value=0><br /><param name=PREFETCH value=0><br /><param name=NOLABELS value=0><br /><param name=SRC value=http://www.jianzhan8.cn/sample.rm><br /><param name=CONTROLS value=StatusBar,controlpanel><br /><param name=CONSOLE value=Clip1><br /><param name=LOOP value=0><br /><param name=NUMLOOP value=0><br /><param name=CENTER value=0><br /><param name=MAINTAINASPECT value=0><br /><param name=BACKGROUNDCOLOR value=#000000><br /></object><br /></p></ul><ul><strong>8:最单的media格式的播攑֙ </strong><p><embed src=mms://www.jianzhan8.cn/sample.wmv width=200 height=200 autostart=true loop=true></embed></p></ul><ul><strong>9:有图像的media播放器,自动调用|上的插?/strong><p><object id=nstv classid=CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6 width=280 height=265 codebase=http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701standby=Loading Microsoft? Windows Media? Player components... type=application/x-oleobject><br /><param name=URL value=http://www.jianzhan8.cn/sample.wma><br /><PARAM NAME=UIMode value=full><PARAM NAME=AutoStart value=true><br /><PARAM NAME=Enabled value=true><br /><PARAM NAME=enableContextMenu value=false><br /><param name=WindowlessVideo value=true></object><br /></p></ul><ul><strong>10:无图像的media播放?/strong><p><object id=nstv classid=CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6 width=280 height=60 codebase=http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701standby=Loading Microsoft? Windows Media? Player components... type=application/x-oleobject><br /><param name=URL value=http://www.jianzhan8.cn/sample.wma><br /><PARAM NAME=UIMode value=full><PARAM NAME=AutoStart value=true><br /><PARAM NAME=Enabled value=true><br /><PARAM NAME=enableContextMenu value=false><br /></object><br /></p></ul><ul><strong>11:在线播放rm格式视频代码</strong><p><object id="player" name="player" classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" width="400" height="272"><br /><param name="_ExtentX" value="18415"><br /><param name="_ExtentY" value="9102"><br /><param name="AUTOSTART" value="-1"><br /><param name="SHUFFLE" value="0"><br /><param name="PREFETCH" value="0"><br /><param name="NOLABELS" value="-1"><br /><param name="SRC" value="http://www.jianzhan8.cn/sample.rm"><br /><param name="CONTROLS" value="Imagewindow"><br /><param name="CONSOLE" value="clip1"><br /><param name="LOOP" value="0"><br /><param name="NUMLOOP" value="0"><br /><param name="CENTER" value="0"><br /><param name="MAINTAINASPECT" value="0"><br /><param name="BACKGROUNDCOLOR" value="#000000"><br /></object><br><br /><object ID="RP2" CLASSID="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" WIDTH="400" HEIGHT="57"><br /><param name="_ExtentX" value="18415"><br /><param name="_ExtentY" value="1005"><br /><param name="AUTOSTART" value="-1"><br /><param name="SHUFFLE" value="0"><br /><param name="PREFETCH" value="0"><br /><param name="NOLABELS" value="-1"><br /><param name="SRC" value="http://www.jianzhan8.cn/sample.rm"><br /><PARAM NAME="CONTROLS" VALUE="ControlPanel,StatusBar"><br /><param name="CONSOLE" value="clip1"><br /><param name="LOOP" value="0"><br /><param name="NUMLOOP" value="0"><br /><param name="CENTER" value="0"><br /><param name="MAINTAINASPECT" value="0"><br /><param name="BACKGROUNDCOLOR" value="#000000"><br /></object><br /><br />转自Q?a >http://www.jianzhan8.cn/shipin/index.htm</a></p></ul><img src ="http://www.tkk7.com/myblogs/aggbug/55783.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/myblogs/" target="_blank">E序-人生</a> 2006-06-29 16:59 <a href="http://www.tkk7.com/myblogs/archive/2006/06/29/55783.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java文g操作大全http://www.tkk7.com/myblogs/archive/2006/06/29/55712.htmlE序-人生E序-人生Thu, 29 Jun 2006 03:45:00 GMThttp://www.tkk7.com/myblogs/archive/2006/06/29/55712.htmlhttp://www.tkk7.com/myblogs/comments/55712.htmlhttp://www.tkk7.com/myblogs/archive/2006/06/29/55712.html#Feedback0http://www.tkk7.com/myblogs/comments/commentRss/55712.htmlhttp://www.tkk7.com/myblogs/services/trackbacks/55712.htmlQ?@ page contentType="text/html;charset=gb2312"%>
Q?@ page import="java.io.*"%>
Qhtml>
Qhead>
Qtitle>文g的徏立、检查与删除Q?title>
Q?head>
Qbody>
Q?
String path=request.getRealPath("");
//out.println(path);
File f=new File(path,"File.txt");
//out.println(f);
//out.println(f.exists());

if(f.exists()){//查File.txt是否存在
f.delete();//删除File.txt文g
out.println(path + "\\File.txt 存在Q已删除?);
}else{
f.createNewFile();//在当前目录下建立一个名为File.txt的文?
out.println(path + "\\File.txt 不存在,已徏立?);//输出目前所在的目录路径
}
%>

目录的徏?查与删除
Q?@ page contentType="text/html;charset=gb2312"%>
Q?@ page import="java.io.*"%>
Qhtml>
Qhead>
Qtitle>目录的徏?查与删除Q?title>
Q?head>
Qbody>
Q?
String path=request.getRealPath("");
path=path + "\\Sub";//要建立的目录\?
File d=new File(path);//建立代表Sub目录的File对象Qƈ得到它的一个引?
if(d.exists()){//查Sub目录是否存在
d.delete();
out.println("Sub目录存在Q已删除");
}else{
d.mkdir();//建立Sub目录
out.println("Sub目录不存在,已徏?);
}
%>
Q?body>
Q?html>


如何在JSP中处理虚拟目?/strong>
Q?@ page contentType="text/html;charset=gb2312"%>
Q?@ page import="java.io.*"%>
Qhtml>
Qhead>
Qtitle>JSP中如何处理虚拟目录</title>
Q?head>
Qbody>
取得虚拟目录对应的磁盘\径<br>
Web站点ȝ录的位置为<font color=#ff0000>Q?=request.getRealPath("/")%>Q?font>Qbr>
JSP|页所在的目录位置Qfont color=#ff0000>Q?=request.getRealPath("./")%>Q?font>Qbr>
JSP|页所在目录上一层目录的位置Qfont color=#ff0000>Q?=request.getRealPath("../")%>Q?font>Qbr>
Q?body>
Q?html>


文g属性的取得
Q?@ page contentType="text/html;charset=gb2312"%>
Q?@ page import="java.util.Date,java.io.*"%>
Qhtml>
Qhead>
Qtitle>文g属性的取得Q?title>
Q?head>
Qbody>
Q?
String path=request.getRealPath("/");
File f=new File(path,"ReadData.txt");
if(f.exists()){
%>
Q?=f.getName()%>的属性如下:Qbr>Qbr>
文g长度为:Q?=f.length()%>
Q?=f.isFile()?"是文?:"不是文g"%>Qbr>
Q?=f.isDirectory()?"是目?:"不是目录"%>Qbr>
Q?=f.canRead()?"可读?:"不可d"%>Qbr>
Q?=f.canWrite()?"可写?:"不可写入"%>Qbr>
Q?=f.isHidden()?"是隐藏文?:"不是隐藏文g"%>Qbr>
文g的最后修Ҏ期ؓQ<%=new Date(f.lastModified())%>Qbr>
Q?
}else{
f.createNewFile();//在当前目录下建立一个名为ReaData.txt的文?
%>
Q?=f.getName()%>的属性如下:Qbr>Qbr>
文g长度为:Q?=f.length()%>
Q?=f.isFile()?"是文?:"不是文g"%>Qbr>
Q?=f.isDirectory()?"是目?:"不是目录"%>Qbr>
Q?=f.canRead()?"可读?:"不可d"%>Qbr>
Q?=f.canWrite()?"可写?:"不可写入"%>Qbr>
Q?=f.isHidden()?"是隐藏文?:"不是隐藏文g"%>Qbr>
文g的最后修Ҏ期ؓQ<%=new Date(f.lastModified())%>Qbr>
Q?
}
%>
Q?body>
Q?html>


取出目录中文件的Ҏ
Q?@ page contentType="text/html;charset=gb2312"%>
Q?@ page import="java.io.*"%>
Qhtml>
Qhead>
Qtitle>取出目录中文件的Ҏ--列出目录中的文gQ?title>
Q?head>
Qbody>
Q?
String path=request.getRealPath("/");
File d=new File(path);//建立当前目录中文件的File对象
File list[]=d.listFiles();//取得代表目录中所有文件的File对象数组
out.println("Qfont color=#ff0000>" + path + "目录下的文gQ</font>Qbr>");
for(int i=0;iQlist.length;i++){
if(listQI>.isFile()){
out.println(listQI>.getName() + "Qbr>");
}
}
out.println("Qbr>Qfont color=#ff0000>" + path + "目录下的目录Q</font>Qbr>");
for(int i=0;iQlist.length;i++){
if(listQI>.isDirectory()){
out.println(listQI>.getName() + "Qbr>");
}
}
%>
Q?body>
Q?html>


判断是否为空白文?
Q?@ page contentType="text/html;charset=gb2312"%>
Q?@ page import="java.io.*"%>
Qhtml>
Qhead>
Qtitle>判断是否为空白文Ӟ/title>
Q?head>
Qbody>
Q?
String path=request.getRealPath("/");
out.println(path);
FileReader fr=new FileReader(path + "\\AtEnd.txt");//建立FileReader对象Qƈ实例化ؓfr
//对FileReadercȝ成的对象使用read()ҎQ可以从字符中d下一个字W?
if(fr.read()==-1)//判断是否已读到文件的l尾
{
out.print("AtEnd.txt文g中没有数据<br>");
}else{
out.println("AtEnd.txt文g中有数据");
}
fr.close();
%>
Q?body>
Q?html>


d所有的文g数据
Q?@ page contentType="text/html;charset=gb2312"%>
Q?@ page import="java.io.*,java.lang.*"%>
Qhtml>
Qhead>
Qtitle>d所有的文g数据Q?title>
Q?head>
Qbody>
Q?
String path=request.getRealPath(".");
FileReader fr=new FileReader(path + "\\ReadData.txt");
//关键在于dq程中,要判断所d的字W是否已l到了文件的末尾Qƈ且这个字W是不是文g中的断行W,卛_断该字符值是否ؓ13?
int c=fr.read();//从文件中d一个字W?
//判断是否已读到文件结?
while(c!=-1){
out.print((char)c);//输出d的数?
c=fr.read();//从文件中l箋d数据
if(c==13){//判断是否为断行字W?
out.print("Qbr>");//输出分行标签
fr.skip(1);//略过一个字W?
//c=fr.read();//d一个字W?
}
}
fr.close();
%>
Q?body>
Q?html>
一行一行读取数?/strong>
Q?@ page contentType="text/html;charset=gb2312"%>
Q?@ page import="java.io.*"%>
Qhtml>
Qhead>
Qtitle>文gdQ?title>
Q?head>
Qbody>
Q?
String path=request.getRealPath("");//取得当前目录的\?
FileReader fr=new FileReader(path + "\\file\\inc\\t.txt");//建立FileReader对象Qƈ实例化ؓfr
BufferedReader br=new BufferedReader(fr);//建立BufferedReader对象Qƈ实例化ؓbr
String Line=br.readLine();//从文件读取一行字W串
//判断d到的字符串是否不为空
while(Line!=null){
out.println(Line + "Qbr>");//输出从文件中d的数?
Line=br.readLine();//从文件中l箋d一行数?
}
br.close();//关闭BufferedReader对象
fr.close();//关闭文g
%>
Q?body>
Q?html>


略过文g中的字符不读?/strong>
Q?@ page contentType="text/html;charset=gb2312"%>
Q?@ page import="java.io.*"%>
Qhtml>
Qhead>
Qtitle>略过字节不读取</title>
Q?head>
Qbody>
Q?
String path=request.getRealPath(".");
FileReader fr=new FileReader(path + "\\ReadData.txt");
fr.skip(2);//跌2个字?
int c=fr.read();//d一个字?
while(c!=-1){
out.print((char)c);
c=fr.read();
}
fr.close();
%>
Q?body>
Q?html>


数据写入文?/strong>
Q?@ page contentType="text/html;charset=gb2312"%>
Q?@ page import="java.io.*"%>
Qhtml>
Qhead>
Qtitle>数据写入文Ӟ/title>
Q?head>
Qbody>
Q?
String path=request.getRealPath(".");
FileWriter fw=new FileWriter(path + "\\WriteData.txt");//建立FileWriter对象Qƈ实例化fw
//字W串写入文g
fw.write("大家好!");
fw.write("本书是《JSP~程技巧?);
fw.write("请多多指教!");
fw.write("email:stride@sina.com");
fw.close();

FileReader fr=new FileReader(path + "\\WriteData.txt");
BufferedReader br=new BufferedReader(fr);//建立BufferedReader对象Qƈ实例化ؓbr
String Line=br.readLine();
//d一行数?
out.println(Line + "Qbr>");
br.close();//关闭BufferedReader对象
fr.close();
%>
Q?body>
Q?html>


写入文件的数据分行
Q?@ page contentType="text/html;charset=gb2312"%>
Q?@ page import="java.io.*"%>
Qhtml>
Qhead>
Qtitle>写入文件的数据分行Q?title>
Q?head>
Qbody>
Q?
String path=request.getRealPath(".");
FileWriter fw=new FileWriter(path + "\\WriteData.txt");
BufferedWriter bw=new BufferedWriter(fw);
bw.write("大家好!");
bw.write("本书是《JSP~程技巧》?);
bw.newLine();//断行
bw.write("请多多指教!");
bw.newLine();//断行
bw.write("email: stride@sina.com");
bw.flush();//数据更新至文g
fw.close();//关闭文g?
out.println("写入文g内容为:Qbr>");
FileReader fr=new FileReader(path + "\\WriteData.txt");
BufferedReader br=new BufferedReader(fr);
String Line=br.readLine();//d一行数?
while(Line!=null){
out.println(Line + "Qbr>");
Line=br.readLine();
}
fr.close();
%>
Q?body>
Q?html>
如何数据追加写入到文g
Q?@ page contentType="text/html;charset=gb2312"%>
Q?@ page import="java.io.*"%>
Qhtml>
Qhead>
Qtitle>写入文件的数据分行Q?title>
Q?head>
Qbody>
Q?
String path=request.getRealPath(".");
RandomAccessFile rf=new RandomAccessFile(path + "\\WriteData.txt","rw");//定义一个类RandomAccessFile的对象,q实例化
rf.seek(rf.length());//指针移动到文g末尾
rf.writeBytes("\nAppend a line to the file!");
rf.close();//关闭文g?
out.println("写入文g内容为:Qbr>");
FileReader fr=new FileReader(path + "\\WriteData.txt");
BufferedReader br=new BufferedReader(fr);//d文g的BufferedRead对象
String Line=br.readLine();
while(Line!=null){
out.println(Line + "Qbr>");
Line=br.readLine();
}
fr.close();//关闭文g
%>
Q?body>
Q?html>Q?I>Q?I>Q?I>Q?I>

摘自Q?a >http://www.cncsk.com


E序-人生 2006-06-29 11:45 发表评论
]]>
有关JAVA文g加密与解?/title><link>http://www.tkk7.com/myblogs/archive/2006/06/29/55685.html</link><dc:creator>E序-人生</dc:creator><author>E序-人生</author><pubDate>Thu, 29 Jun 2006 02:19:00 GMT</pubDate><guid>http://www.tkk7.com/myblogs/archive/2006/06/29/55685.html</guid><wfw:comment>http://www.tkk7.com/myblogs/comments/55685.html</wfw:comment><comments>http://www.tkk7.com/myblogs/archive/2006/06/29/55685.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.tkk7.com/myblogs/comments/commentRss/55685.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/myblogs/services/trackbacks/55685.html</trackback:ping><description><![CDATA[ <div> <font color="#0000ff">import java.awt.*; <br />import java.awt.event.*; <br />import javax.swing.*; <br />import java.io.*; <br />import java.security.*; <br />import javax.crypto.*; <br />/*<br /> * FileEncrypterT.java<br /> *<br /> * Created on 2006q??9? 上午11:14<br /> */</font> </div> <div> <font color="#0000ff">package key;<br />import java.awt.*;<br />import java.awt.event.*;<br />import javax.swing.*;<br />import java.io.*;<br />import java.security.*;<br />import javax.crypto.*;<br />import javax.crypto.spec.*;<br />/**<br /> *<br /> * @author  dragon love<br /> */<br />public class FileEncrypterT extends javax.swing.JFrame {<br />    public static final int WIDTH = 550;<br />    public static final int HEIGHT = 200;<br />    <br />    /** This method is called from within the constructor to<br />     * initialize the form.<br />     * WARNING: Do NOT modify this code. The content of this method is<br />     * always regenerated by the Form Editor.<br />     */<br />    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">                          <br />    private void initComponents() {<br />        <br />        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);<br />        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());<br />        getContentPane().setLayout(layout);<br />        layout.setHorizontalGroup(<br />                layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)<br />                .add(0, 400, Short.MAX_VALUE)<br />                );<br />        layout.setVerticalGroup(<br />                layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)<br />                .add(0, 300, Short.MAX_VALUE)<br />                );<br />        pack();<br />    }<br />    // </editor-fold>                        <br />    <br />    /**<br />     * @param args the command line arguments<br />     */<br />    public static void main(String args[]) {<br />        FileEncrypter fe = new FileEncrypter();<br />        fe.show();<br />    }<br />    FileEncrypterT(){<br />        this.setSize(WIDTH,HEIGHT);<br />        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br />        this.setResizable(false);<br />        Toolkit tk = Toolkit.getDefaultToolkit();<br />        Dimension screenSize = tk.getScreenSize();<br />        this.setLocation((screenSize.width - WIDTH)/2,<br />                (screenSize.height - HEIGHT)/2);<br />        this.setTitle("文g加密?TriDES)");<br />        Container c = this.getContentPane();<br />        c.setLayout( new FlowLayout());<br />        <br />        final FilePanel fp = new FilePanel("文g选择");<br />        c.add(fp);<br />        <br />        final KeyPanel pp = new KeyPanel("密码");<br />        c.add(pp);<br />        <br />        JButton jbE = new JButton("加密");<br />        c.add(jbE);<br />        jbE.addActionListener(new ActionListener(){<br />            public void actionPerformed(ActionEvent event){<br />                File file = new File(fp.getFileName());<br />                if (file.exists())<br />                    encrypt(file.getAbsoluteFile(),pp.getKey());<br />                else<br />                    JOptionPane.showMessageDialog(<br />                            null,"请选择文gQ?,"提示",JOptionPane.OK_OPTION);<br />            }<br />        });<br />        JButton jbD = new JButton("解密");<br />        c.add(jbD);<br />        jbD.addActionListener(new ActionListener(){<br />            public void actionPerformed(ActionEvent event){<br />                File file = new File(fp.getFileName());<br />                if (file.exists())<br />                    decrypt(file.getAbsoluteFile(),pp.getKey());<br />                else<br />                    JOptionPane.showMessageDialog(<br />                            null,"请选择文gQ?,"提示",JOptionPane.OK_OPTION);<br />            }<br />        });<br />    }<br />    <br />    /**<br />     * 加密函数<br />     * 输入Q?br />     * 要加密的文gQ密码(?-Fl成Q共48个字W,表示3?位的密码Q如Q?br />     * AD67EA2F3BE6E5ADD368DFE03120B5DF92A8FD8FEC2F0746<br />     * 其中Q?br />     * AD67EA2F3BE6E5AD DES密码一<br />     * D368DFE03120B5DF DES密码?br />     * 92A8FD8FEC2F0746 DES密码?br />     * 输出Q?br />     * 对输入的文g加密后,保存到同一文g夹下增加?.tdes"扩展名的文g中?br />     */<br />    private void encrypt(File fileIn,String sKey){<br />        try{<br />            if(sKey.length() == 48){<br />                byte[] bytK1 = getKeyByStr(sKey.substring(0,16));<br />                byte[] bytK2 = getKeyByStr(sKey.substring(16,32));<br />                byte[] bytK3 = getKeyByStr(sKey.substring(32,48));<br />                <br />                FileInputStream fis = new FileInputStream(fileIn);<br />                byte[] bytIn = new byte[(int)fileIn.length()];<br />                for(int i = 0;i<fileIn.length();i++){<br />                    bytIn[i] = (byte)fis.read();<br />                }<br />//加密<br />                byte[] bytOut = encryptByDES(encryptByDES(<br />                        encryptByDES(bytIn,bytK1),bytK2),bytK3);<br />                String fileOut = fileIn.getPath() + ".tdes";<br />                FileOutputStream fos = new FileOutputStream(fileOut);<br />                for(int i = 0;i<bytOut.length;i++){<br />                    fos.write((int)bytOut[i]);<br />                }<br />                fos.close();<br />                JOptionPane.showMessageDialog(<br />                        this,"加密成功Q?,"提示",JOptionPane.OK_OPTION);<br />            }else<br />                JOptionPane.showMessageDialog(<br />                        this,"密码长度必须{于48Q?,"错误信息",JOptionPane.ERROR_MESSAGE);<br />        }catch(Exception e){<br />            e.printStackTrace();<br />        }<br />    }<br />    <br />    /**<br />     * 解密函数<br />     * 输入Q?br />     * 要解密的文gQ密码(?-Fl成Q共48个字W,表示3?位的密码Q如Q?br />     * AD67EA2F3BE6E5ADD368DFE03120B5DF92A8FD8FEC2F0746<br />     * 其中Q?br />     * AD67EA2F3BE6E5AD DES密码一<br />     * D368DFE03120B5DF DES密码?br />     * 92A8FD8FEC2F0746 DES密码?br />     * 输出Q?br />     * 对输入的文g解密后,保存到用h定的文g中?br />     */<br />    private void decrypt(File fileIn,String sKey){<br />        try{<br />            if(sKey.length() == 48){<br />                String strPath = fileIn.getPath();<br />                if(strPath.substring(strPath.length()-5).toLowerCase().equals(".tdes"))<br />                    strPath = strPath.substring(0,strPath.length()-5);<br />                else{<br />                    JOptionPane.showMessageDialog(<br />                            this,"不是合法的加密文Ӟ","提示",JOptionPane.OK_OPTION);<br />                    return;<br />                }<br />                JFileChooser chooser = new JFileChooser();<br />                chooser.setCurrentDirectory(new File("."));<br />                chooser.setSelectedFile(new File(strPath));<br />//用户指定要保存的文g<br />                int ret = chooser.showSaveDialog(this);<br />                if(ret==JFileChooser.APPROVE_OPTION){<br />                    <br />                    byte[] bytK1 = getKeyByStr(sKey.substring(0,16));<br />                    byte[] bytK2 = getKeyByStr(sKey.substring(16,32));<br />                    byte[] bytK3 = getKeyByStr(sKey.substring(32,48));<br />                    <br />                    FileInputStream fis = new FileInputStream(fileIn);<br />                    byte[] bytIn = new byte[(int)fileIn.length()];<br />                    for(int i = 0;i<fileIn.length();i++){<br />                        bytIn[i] = (byte)fis.read();<br />                    }<br />//解密<br />                    byte[] bytOut = decryptByDES(decryptByDES(<br />                            decryptByDES(bytIn,bytK3),bytK2),bytK1);<br />                    File fileOut = chooser.getSelectedFile();<br />                    fileOut.createNewFile();<br />                    FileOutputStream fos = new FileOutputStream(fileOut);<br />                    for(int i = 0;i<bytOut.length;i++){<br />                        fos.write((int)bytOut[i]);<br />                    }<br />                    fos.close();<br />                    JOptionPane.showMessageDialog(<br />                            this,"解密成功Q?,"提示",JOptionPane.OK_OPTION);<br />                }<br />            }else<br />                JOptionPane.showMessageDialog(<br />                        this,"密码长度必须{于48Q?,"错误信息",JOptionPane.ERROR_MESSAGE);<br />        }catch(Exception e){<br />            JOptionPane.showMessageDialog(<br />                    this,"解密p|Q请核对密码Q?,"提示",JOptionPane.OK_OPTION);<br />        }<br />    }<br />    <br />    /**<br />     * 用DESҎ加密输入的字?br />     * bytKey需?字节长,是加密的密码<br />     */<br />    private byte[] encryptByDES(byte[] bytP,byte[] bytKey) throws Exception{<br />        DESKeySpec desKS = new DESKeySpec(bytKey);<br />        SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");<br />        SecretKey sk = skf.generateSecret(desKS);<br />        Cipher cip = Cipher.getInstance("DES");<br />        cip.init(Cipher.ENCRYPT_MODE,sk);<br />        return cip.doFinal(bytP);<br />    }<br />    <br />    /**<br />     * 用DESҎ解密输入的字?br />     * bytKey需?字节长,是解密的密码<br />     */<br />    private byte[] decryptByDES(byte[] bytE,byte[] bytKey) throws Exception{<br />        DESKeySpec desKS = new DESKeySpec(bytKey);<br />        SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");<br />        SecretKey sk = skf.generateSecret(desKS);<br />        Cipher cip = Cipher.getInstance("DES");<br />        cip.init(Cipher.DECRYPT_MODE,sk);<br />        return cip.doFinal(bytE);<br />    }<br />    <br />    /**<br />     * 输入密码的字WŞ式,q回字节数组形式?br />     * 如输入字W串QAD67EA2F3BE6E5AD<br />     * q回字节数组Q{173,103,234,47,59,230,229,173}<br />     */<br />    private byte[] getKeyByStr(String str){<br />        byte[] bRet = new byte[str.length()/2];<br />        for(int i=0;i<str.length()/2;i++){<br />            Integer itg =<br />                    new Integer(16*getChrInt(str.charAt(2*i)) + getChrInt(str.charAt(2*i+1)));<br />            bRet[i] = itg.byteValue();<br />        }<br />        return bRet;<br />    }<br />    /**<br />     * 计算一?6q制字符?0q制?br />     * 输入Q?-F<br />     */<br />    private int getChrInt(char chr){<br />        int iRet=0;<br />        if(chr=="0".charAt(0)) iRet = 0;<br />        if(chr=="1".charAt(0)) iRet = 1;<br />        if(chr=="2".charAt(0)) iRet = 2;<br />        if(chr=="3".charAt(0)) iRet = 3;<br />        if(chr=="4".charAt(0)) iRet = 4;<br />        if(chr=="5".charAt(0)) iRet = 5;<br />        if(chr=="6".charAt(0)) iRet = 6;<br />        if(chr=="7".charAt(0)) iRet = 7;<br />        if(chr=="8".charAt(0)) iRet = 8;<br />        if(chr=="9".charAt(0)) iRet = 9;<br />        if(chr=="A".charAt(0)) iRet = 10;<br />        if(chr=="B".charAt(0)) iRet = 11;<br />        if(chr=="C".charAt(0)) iRet = 12;<br />        if(chr=="D".charAt(0)) iRet = 13;<br />        if(chr=="E".charAt(0)) iRet = 14;<br />        if(chr=="F".charAt(0)) iRet = 15;<br />        return iRet;<br />    }<br />    // Variables declaration - do not modify                     <br />    // End of variables declaration                   <br />    <br />}</font> </div> <div> <font color="#0000ff">/**<br /> * 文g选择lg?br /> */<br />class FilePanel extends JPanel{<br />    FilePanel(String str){<br />        JLabel label = new JLabel(str);<br />        JTextField fileText = new JTextField(35);<br />        JButton chooseButton = new JButton("览...");<br />        this.add(label);<br />        this.add(fileText);<br />        this.add(chooseButton);<br />        clickAction ca = new clickAction(this);<br />        chooseButton.addActionListener(ca);<br />        <br />    }<br />    <br />    public String getFileName(){<br />        JTextField jtf = (JTextField)this.getComponent(1);<br />        return jtf.getText();<br />    }<br />    <br />    private class clickAction implements ActionListener{<br />        clickAction(Component c){<br />            cmpt = c;<br />        }<br />        <br />        public void actionPerformed(ActionEvent event){<br />            JFileChooser chooser = new JFileChooser();<br />            chooser.setCurrentDirectory(new File("."));<br />            int ret = chooser.showOpenDialog(cmpt);<br />            if(ret==JFileChooser.APPROVE_OPTION){<br />                JPanel jp = (JPanel)cmpt;<br />                JTextField jtf = (JTextField)jp.getComponent(1);<br />                jtf.setText(chooser.getSelectedFile().getPath());<br />            }<br />        }<br />        <br />        private Component cmpt;<br />    }<br />}</font> </div> <div> <font color="#0000ff">/**<br /> * 密码生成lg?br /> */<br />class KeyPanel extends JPanel{<br />    KeyPanel(String str){<br />        JLabel label = new JLabel(str);<br />        JTextField fileText = new JTextField(35);<br />        JButton chooseButton = new JButton("随机产生");<br />        this.add(label);<br />        this.add(fileText);<br />        this.add(chooseButton);<br />        clickAction ca = new clickAction(this);<br />        chooseButton.addActionListener(ca);<br />        <br />    }<br />    <br />//q回生成的密码(48个字W长度)<br />    public String getKey(){<br />        JTextField jtf = (JTextField)this.getComponent(1);<br />        return jtf.getText();<br />    }<br />    <br />    private class clickAction implements ActionListener{<br />        clickAction(Component c){<br />            cmpt = c;<br />        }<br />        <br />        public void actionPerformed(ActionEvent event){<br />            try{<br />                KeyGenerator kg = KeyGenerator.getInstance("DES");<br />                kg.init(56);<br />                Key ke = kg.generateKey();<br />                byte[] bytK1 = ke.getEncoded();<br />                ke = kg.generateKey();<br />                byte[] bytK2 = ke.getEncoded();<br />                ke = kg.generateKey();<br />                byte[] bytK3 = ke.getEncoded();<br />                <br />                JPanel jp = (JPanel)cmpt;<br />                JTextField jtf = (JTextField)jp.getComponent(1);<br />                jtf.setText(getByteStr(bytK1)+getByteStr(bytK2)+getByteStr(bytK3));<br />            }catch(Exception e){<br />                e.printStackTrace();<br />            }<br />        }<br />        <br />        private String getByteStr(byte[] byt){<br />            String strRet = "";<br />            for(int i=0;i<byt.length;i++){<br />//System.out.println(byt[i]);<br />                strRet += getHexValue((byt[i]&240)/16);<br />                strRet += getHexValue(byt[i]&15);<br />            }<br />            return strRet;<br />        }<br />        <br />        private String getHexValue(int s){<br />            String sRet=null;<br />            switch (s){<br />                case 0: sRet = "0";break;<br />                case 1: sRet = "1";break;<br />                case 2: sRet = "2";break;<br />                case 3: sRet = "3";break;<br />                case 4: sRet = "4";break;<br />                case 5: sRet = "5";break;<br />                case 6: sRet = "6";break;<br />                case 7: sRet = "7";break;<br />                case 8: sRet = "8";break;<br />                case 9: sRet = "9";break;<br />                case 10: sRet = "A";break;<br />                case 11: sRet = "B";break;<br />                case 12: sRet = "C";break;<br />                case 13: sRet = "D";break;<br />                case 14: sRet = "E";break;<br />                case 15: sRet = "F";<br />            }<br />            return sRet;<br />        }<br />        <br />        private Component cmpt;<br />    }<br />}<br /></font> </div> <br /> <br /> <img src="http://www.zhanglihai.com/data/uploadfiles//200502/25/tvxgiihj_1109296469805.jpg" /> <br /> <br />摘自Q?a target="_blank">http://dev.csdn.net/article/article/63/63304.shtm</a><br /><img src ="http://www.tkk7.com/myblogs/aggbug/55685.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/myblogs/" target="_blank">E序-人生</a> 2006-06-29 10:19 <a href="http://www.tkk7.com/myblogs/archive/2006/06/29/55685.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate?对象/关系数据库映基(Basic O/R Mapping)http://www.tkk7.com/myblogs/archive/2006/06/28/55539.htmlE序-人生E序-人生Wed, 28 Jun 2006 06:37:00 GMThttp://www.tkk7.com/myblogs/archive/2006/06/28/55539.htmlhttp://www.tkk7.com/myblogs/comments/55539.htmlhttp://www.tkk7.com/myblogs/archive/2006/06/28/55539.html#Feedback0http://www.tkk7.com/myblogs/comments/commentRss/55539.htmlhttp://www.tkk7.com/myblogs/services/trackbacks/55539.html阅读全文

E序-人生 2006-06-28 14:37 发表评论
]]>
Struts快速学习指?/title><link>http://www.tkk7.com/myblogs/archive/2006/06/28/55536.html</link><dc:creator>E序-人生</dc:creator><author>E序-人生</author><pubDate>Wed, 28 Jun 2006 06:22:00 GMT</pubDate><guid>http://www.tkk7.com/myblogs/archive/2006/06/28/55536.html</guid><wfw:comment>http://www.tkk7.com/myblogs/comments/55536.html</wfw:comment><comments>http://www.tkk7.com/myblogs/archive/2006/06/28/55536.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/myblogs/comments/commentRss/55536.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/myblogs/services/trackbacks/55536.html</trackback:ping><description><![CDATA[     摘要: Struts快速学习指?素材来自于《Programming Jakarta Struts》一书 ?1.     Struts介Struts 是一个技术框Ӟ由Craig R. McClanahan~写Qƈ且在2000q的时候捐献给了ASFQ目前,有很多组l和个h参与Struts框架的开发,使得Struts保持高速成长,同时Q利用Struts开发的应用来多Q其成为web应用MVC模式中V...  <a href='http://www.tkk7.com/myblogs/archive/2006/06/28/55536.html'>阅读全文</a><img src ="http://www.tkk7.com/myblogs/aggbug/55536.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/myblogs/" target="_blank">E序-人生</a> 2006-06-28 14:22 <a href="http://www.tkk7.com/myblogs/archive/2006/06/28/55536.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FCKeditor在线~辑器的使用http://www.tkk7.com/myblogs/archive/2006/06/28/55533.htmlE序-人生E序-人生Wed, 28 Jun 2006 06:15:00 GMThttp://www.tkk7.com/myblogs/archive/2006/06/28/55533.htmlhttp://www.tkk7.com/myblogs/comments/55533.htmlhttp://www.tkk7.com/myblogs/archive/2006/06/28/55533.html#Feedback9http://www.tkk7.com/myblogs/comments/commentRss/55533.htmlhttp://www.tkk7.com/myblogs/services/trackbacks/55533.htmlFCKeditor.java 2.3 (FCKeditot for java)
FCKeditor 2.2 (FCKeditor基本文g)

2.建立目:tomcat/webapps/TestFCKeditor.

3.FCKeditor2.2解压~?整个目录FCKeditor复制到项目的根目录下Q?br />目录l构为:tomcat/webapps/TestFCKeditor/FCKeditor
然后FCKeditor-2.3.zipQjavaQ压~包中\web\WEB-INF\lib\目录下的两个jar文g拷到目的\WEB-INF\lib\目录下。把其中的src目录下的FCKeditor.tld文gcopy到TestFCKedit/FCKeitor/WEB-INF/?/p>

4.FCKeditor-2.3.zip压羃包中\web\WEB-INF\目录下的web.xml文g合ƈ到项目的\WEB-INF\目录下的web.xml文g中?/p>

5. 修改合ƈ后的web.xml文gQ将名ؓSimpleUploader的Servlet的enabled参数值改为trueQ?br />以允怸传功能,Connector Servlet的baseDir参数值用于设|上传文件存攄位置?br />d标签定义:
<taglib>
<taglib-uri>/TestFCKeditor</taglib-uri>
<taglib-location>/WEB-INF/FCKeditor.tld</taglib-location>
</taglib>

6. 上面文g中两个servlet的映分别ؓQ?editor/filemanager/browser/default/connectors/jsp/connector
?editor/filemanager/upload/simpleuploaderQ需要在两个映射前面加上/FCKeditorQ?br />x?FCKeditor/editor/filemanager/browser/default/connectors/jsp/connector?br />/FCKeditor/editor/filemanager/upload/simpleuploader?/p>

7.q入skin文g夹,如果你想使用fckeditor默认的这U奶黄色Q?br />那就把除了default文g夹外的另两个文g夹直接删?

8.删除/FCKeditor/目录下除fckconfig.js, fckeditor.js, fckstyles.xml, fcktemplates.xml四个文g以外的所有文?
删除目录/editor/_source,
删除/editor/filemanager/browser/default/connectors/下的所有文?br />删除/editor/filemanager/upload/下的所有文?br />删除/editor/lang/下的除了fcklanguagemanager.js, en.js, zh.js, zh-cn.js四个文g的所有文?/p>

9.打开/FCKeditor/fckconfig.js
修改 FCKConfig.DefaultLanguage = 'zh-cn' ;
把FCKConfig.LinkBrowserURL{的值替换成以下内容Q?br />FCKConfig.LinkBrowserURL
= FCKConfig.BasePath + "filemanager/browser/default/browser.html?Connector=connectors/jsp/connector" ;

FCKConfig.ImageBrowserURL
= FCKConfig.BasePath + "filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector" ;

FCKConfig.FlashBrowserURL
= FCKConfig.BasePath + "filemanager/browser/default/browser.html?Type=Flash&Connector=connectors/jsp/connector" ;


FCKConfig.LinkUploadURL = FCKConfig.BasePath + 'filemanager/upload/simpleuploader?Type=File' ;
FCKConfig.FlashUploadURL = FCKConfig.BasePath + 'filemanager/upload/simpleuploader?Type=Flash' ;
FCKConfig.ImageUploadURL = FCKConfig.BasePath + 'filemanager/upload/simpleuploader?Type=Image' ;

10.其它
fckconfig.js总配|文Ӟ可用记录本打开Q修改后文件存为utf-8 ~码格式。找刎ͼ

FCKConfig.TabSpaces = 0 ; 改ؓFCKConfig.TabSpaces = 1 ; 卛_~辑器域内可以用Tab键?/p>

如果你的~辑器还用在|站前台的话Q比如说用于留言本或是日记回复时Q那׃得不考虑安全了,
在前台千万不要用Default的toolbarQ要么自定义一下功能,要么qpȝ已经定义好的BasicQ?br />也就是基本的toolbarQ找刎ͼ
FCKConfig.ToolbarSets["Basic"] = [
['Bold','Italic','-','OrderedList','UnorderedList','-',/*'Link',*/'Unlink','-','Style','FontSize','TextColor','BGColor','-',
'Smiley','SpecialChar','Replace','Preview'] ] ;
q是改过的BasicQ把囑փ功能LQ把d链接功能LQ因为图像和链接和flash和图像按钮添加功能都能让前台
늛接访问和上传文gQ?fckeditorq支持编辑域内的鼠标右键功能?br />
FCKConfig.ContextMenu = ['Generic',/*'Link',*/'Anchor',/*'Image',*/'Flash','Select','Textarea','Checkbox','Radio','TextField','HiddenField',
/*'ImageButton',*/'Button','BulletedList','NumberedList','TableCell','Table','Form'] ;

q也是改q的把鼠标右键的“链接、图像,FLASHQ图像按钮”功能都L?/p>

  扑ֈQ?FCKConfig.FontNames = 'Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana' ;
加上几种我们常用的字?
FCKConfig.FontNames
= '宋体;黑体;隶书;楷体_GB2312;Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana' ;

7、添加页?br />
<%@ page language="java" import="com.fredck.FCKeditor.*" %>
<%@ taglib uri="/WEB-INF/tlds/FCKeditor.tld" prefix="FCK" %>
<script type="text/javascript" src="FCKeditor/fckeditor.js"></script>

<form action="show.jsp" method="post" target="_blank">
<table border="0" width="700"><tr><td>
<textarea id="content" name="content" style="WIDTH: 100%; HEIGHT: 400px">input</textarea>
<script type="text/javascript">
var oFCKeditor = new FCKeditor('content') ;
oFCKeditor.BasePath = "FCKeditor/" ;
oFCKeditor.Height = 400;
oFCKeditor.ToolbarSet = "Default" ;
oFCKeditor.ReplaceTextarea();
</script>
<input type="submit" value="Submit">
</td></tr></table>
</form>

~辑web.xml 文集 d 如下片断

 <servlet>
  <servlet-name>SimpleUploader</servlet-name>
  <servlet-class>com.fredck.FCKeditor.uploader.SimpleUploaderServlet</servlet-class>
  <init-param>
   <param-name>baseDir</param-name>
   <param-value>/UserFiles/</param-value>
  </init-param>
  <init-param>
   <param-name>debug</param-name>
   <param-value>true</param-value>
  </init-param>
  <init-param>
   <param-name>enabled</param-name>
   <param-value>false</param-value>
  </init-param>
  <init-param>
   <param-name>AllowedExtensionsFile</param-name>
   <param-value></param-value>
  </init-param>
  <init-param>
   <param-name>DeniedExtensionsFile</param-name>
   <param-value>php|php3|php5|phtml|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|dll|reg|cgi</param-value>
  </init-param>
  <init-param>
   <param-name>AllowedExtensionsImage</param-name>
   <param-value>jpg|gif|jpeg|png|bmp</param-value>
  </init-param>
  <init-param>
   <param-name>DeniedExtensionsImage</param-name>
   <param-value></param-value>
  </init-param>
  <init-param>
   <param-name>AllowedExtensionsFlash</param-name>
   <param-value>swf|fla</param-value>
  </init-param>
  <init-param>
   <param-name>DeniedExtensionsFlash</param-name>
   <param-value></param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>

  <servlet-mapping>
    <servlet-name>Connector</servlet-name>
    <url-pattern>/FCKeditor/editor/filemanager/browser/default/connectors/jsp/connector</url-pattern>
  </servlet-mapping>
 
  <servlet-mapping>
    <servlet-name>SimpleUploader</servlet-name>
    <url-pattern>/FCKeditor/editor/filemanager/upload/simpleuploader</url-pattern>
  </servlet-mapping> 



 <taglib>
 <taglib-uri>/WEB-INF/FCKeditor.tld</taglib-uri>
 <taglib-location>/WEB-INF/tlds/FCKeditor.tld</taglib-location>
 </taglib>

OKQ?/p>

E序-人生 2006-06-28 14:15 发表评论
]]>
表单相关Ҏ整理http://www.tkk7.com/myblogs/archive/2006/06/28/55530.htmlE序-人生E序-人生Wed, 28 Jun 2006 05:55:00 GMThttp://www.tkk7.com/myblogs/archive/2006/06/28/55530.htmlhttp://www.tkk7.com/myblogs/comments/55530.htmlhttp://www.tkk7.com/myblogs/archive/2006/06/28/55530.html#Feedback0http://www.tkk7.com/myblogs/comments/commentRss/55530.htmlhttp://www.tkk7.com/myblogs/services/trackbacks/55530.htmlENTER键可以让光标Ud下一个输入框
<input onkeydown="if(event.keyCode==13)event.keyCode=9" > <br>

只能是中?lt;input onkeyup="value=value.replace(/[ -~]/g,'')" onkeydown="if(event.keyCode==13)event.keyCode=9"> <br>

屏蔽输入?lt;input style="ime-mode:disabled" onkeydown="if(event.keyCode==13)event.keyCode=9"> <br>

只能输入英文和数?lt;input onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" onkeydown="if(event.keyCode==13)event.keyCode=9"> <br>

只能是数?lt;input onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"><br>

只能昄Q不能修?lt;input readonly value="只能昄Q不能修?>


只能是数字,判断按键的倹{?br /><script  language=javascript>
function  onlyNum()
{
if(!((event.keyCode>=48&&event.keyCode<=57)||(event.keyCode>=96&&event.keyCode<=105)||(event.keyCode==8)))
event.returnValue=false;
}
</script>
<input  onkeydown="onlyNum();"> 


获取键盘的KeyCode

<html>
<head>
<script language="javascript">
  ns4 = (document.layers) ? true : false;
  ie4 = (document.all) ? true : false;
function keyDown(e){
  if(ns4){
  var nkey=e.which;
  var iekey='现在是ns览?;
  var realkey=String.fromCharCode(e.which);
}
  if(ie4){
  var iekey=event.keyCode;
  var nkey='现在是ie览?;
  var realkey=String.fromCharCode(event.keyCode);
  if(event.keyCode==32){realkey='\' I格\''}
  if(event.keyCode==13){realkey='\' 回R\''}
  if(event.keyCode==27){realkey='\' Esc\''}
  if(event.keyCode==16){realkey='\' Shift\''}
  if(event.keyCode==17){realkey='\' Ctrl\''}
  if(event.keyCode==18){realkey='\' Alt\''}
}
  alert('ns览器中键?'+nkey+'\n'+'ie览器中键?'+iekey+'\n'+'实际键ؓ'+realkey);
}
document.onkeydown = keyDown;
if(ns4){
document.captureEvents(Event.KEYDOWN);}
</script>
</head>
<body>
//Javascript Document.
<hr>
<center>
<h3>hL一个键。。。?lt;/h3>
</center>
</body>
</html>

限制|页用键?/p>

<body onkeydown="alert('用');return false;">
限制键盘的某个键Qbody onkeydown="if(event.keyCode==num){alert('用');return false;}

再加个找按键的?/p>

<script>
function show(){
  alert("ASCII代码是:"+event.keyCode);
}
</script>
<body onkeydown="show()">

只能是IP地址

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<style>
.a3{width:30;border:0;text-align:center}
</style>
<script>
function mask(obj){
obj.value=obj.value.replace(/[^\d]/g,'')
key1=event.keyCode
if (key1==37 || key1==39)
{ obj.blur();
nextip=parseInt(obj.name.substr(2,1))
nextip=key1==37?nextip-1:nextip+1;
nextip=nextip>=5?1:nextip
nextip=nextip<=0?4:nextip
eval("ip"+nextip+".focus()")
}
if(obj.value.length>=3)
if(parseInt(obj.value)>=256 || parseInt(obj.value)<=0)
{
alert(parseInt(obj.value)+"IP地址错误Q?)
obj.value=""
obj.focus()
return false;
}
else
{ obj.blur();
nextip=parseInt(obj.name.substr(2,1))+1
nextip=nextip>=5?1:nextip
nextip=nextip<=0?4:nextip
eval("ip"+nextip+".focus()")
}
}
function mask_c(obj)
{
clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))
}

</script>
<title>IP地址输入</title>

</head>
<body>IP地址输入
<div style="border-width:1;border-color:balck;border-style:solid;width:165;font-size:9pt">
<input type=text name=ip1 maxlength=3 class=a3 onkeyup="mask(this)" onbeforepaste=mask_c()>.
<input type=text name=ip2 maxlength=3 class=a3 onkeyup="mask(this)" onbeforepaste=mask_c()>.
<input type=text name=ip3 maxlength=3 class=a3 onkeyup="mask(this)" onbeforepaste=mask_c()>.
<input type=text name=ip4 maxlength=3 class=a3 onkeyup="mask(this)" onbeforepaste=mask_c()>
</div>
</body>

?default#savehistory防止后退清空text文本框:

<HTML>
<HEAD>
<META NAME="save" CONTENT="history">
<STYLE>
  .saveHistory {behavior:url(#default#savehistory);}
</STYLE>
</HEAD>
<BODY>
<INPUT class=saveHistory type=text id=oPersistInput>
<input type=button onclick='javascript:location.href=" value='点击q入,再按后退键试试?'>
</BODY>
</HTML>


TEXTAREA自适应文字行数的多?/p>

<textarea rows=1 name=s1 cols=27 onpropertychange="this.style.posHeight=this.scrollHeight">

上传预览囄

<img id=pic  src=http://www.cnbruce.com/images/logo.gif>
<input type=file name=file><input type=button onclick=pic.src=file.value value=预览囄>
<input type=button onclick=alert(file.value) value=囄地址>
<input type=button onclick="file.outerHTML=file.outerHTML.replace(/value=\w/g,'')" value="清除file里字">

L下拉选项的边?br /><div style="position: absolute; left: 10px; top: 10px; width: 115px; height: 20px;  clip:rect(2 114 20 2);">
   <select>
    <option >cnpeople</option>
    <option >cnrose</option>
   <option >cnbruce</option> 
  </select>
  </font>
</div>

下拉列表打开H口
<select  onChange="if(this.selectedIndex && this.selectedIndex!=0){window.open(this.value);}this.selectedIndex=0;">
<option selected>更多链接…?lt;/option>
<option value="
>
<option value="
>
<option value="

</select>


通过下拉菜单传递蟩?/p>

<form action="showlog.asp?" >
<select name="cat_id" onpropertychange="form.submit();">
<option value="">==请选择==</option>
<option value="11">11</option>
<option value="22">22</option>
</select>
</form>


TAB键在文本域中的体?/p>

<script>
function editTab()
{
    var code, sel, tmp, r
    var tabs=""
    event.returnValue = false
    sel =event.srcElement.document.selection.createRange()
    r = event.srcElement.createTextRange()

    switch (event.keyCode)
    {
        case (8)    :
            if (!(sel.getClientRects().length > 1))
            {
                event.returnValue = true
                return
            }
            code = sel.text
            tmp = sel.duplicate()
            tmp.moveToPoint(r.getBoundingClientRect().left, sel.getClientRects()[0].top)
            sel.setEndPoint("startToStart", tmp)
            sel.text = sel.text.replace(/^\t/gm, "")
            code = code.replace(/^\t/gm, "").replace(/\r\n/g, "\r")
            r.findText(code)
            r.select()
            break
        case (9)    :
            if (sel.getClientRects().length > 1)
            {
                code = sel.text
                tmp = sel.duplicate()
                tmp.moveToPoint(r.getBoundingClientRect().left, sel.getClientRects()[0].top)
                sel.setEndPoint("startToStart", tmp)
                sel.text = "\t"+sel.text.replace(/\r\n/g, "\r\t")
                code = code.replace(/\r\n/g, "\r\t")
                r.findText(code)
                r.select()
            }
            else
            {
                sel.text = "\t"
                sel.select()
            }
            break
        case (13)    :
            tmp = sel.duplicate()
            tmp.moveToPoint(r.getBoundingClientRect().left, sel.getClientRects()[0].top)
            tmp.setEndPoint("endToEnd", sel)

            for (var i=0; tmp.text.match(/^[\t]+/g) && i<tmp.text.match(/^[\t]+/g)[0].length; i++)    tabs += "\t"
            sel.text = "\r\n"+tabs
            sel.select()
            break
        default        :
            event.returnValue = true
            break
    }
}
</script>

<textarea cols=75 rows=20 onkeydown="editTab()">
<script>
alert("ok")
</script></textarea>

文本框的?下拉

form name="cnbruce">
<textarea name="com">
</textarea>
</form>
<SPAN title='攑֤输入? style='FONT-SIZE: 12px; CURSOR: hand'  onclick=document.cnbruce.com.rows+=4>向下</SPAN>
 <SPAN title='~小输入? style='FONT-SIZE: 12px; CURSOR: hand' class='arrow' onclick='if(document.cnbruce.com.rows>=4)document.cnbruce.com.rows-=4;else return false'>向上</SPAN>


一个复选框Q点M后一l复选框全部都选上

<input type="checkbox" name="checkA" onpropertychange="for(i=0;i<A.children.length;i++){A.children[i].checked=this.checked}">a
<br>
<span id="A">
<input type="checkbox" name="A1">
<input type="checkbox" name="A2">
<input type="checkbox" name="A3">
</span>

Debug TextareaQ在U写 js 脚本的时候,用来x查错的东西!

<HTML>
<HEAD>
<TITLE>Debug Textarea</TITLE>
<meta http-equiv='Content-Type' content='text/html; charset=gb2312'>
</HEAD>
<style>
* {
    font-size: 12px
}
body {
    margin: 10px; padding: 0px
}
table.list{
    cursor: default;
    border:1px solid #cccccc
    background-color: #cccccc;
    border-collapse: collapse;
    border-Color: #cccccc;
}
</style>
<script language="javascript">
// Coded by windy_sk <
windy_sk@126.com> 20040205

function reportError(msg,url,line) {
    var str = "You have found an error as below: \n\n";
    str += "Err: " + msg + " on line: " + line;
    alert(str);
    return true;
}

window.onerror = reportError;


document.onkeydown = function() {
    if(event.ctrlKey){
        switch(event.keyCode) {
            case 82: //r
                runcode();
                break;
            case 83: //s
                savecode();
                break;
            case 71: //g
                goto(prompt('Please input the line number', '1'));
                break;
            case 65: //a
                document.execCommand("SelectAll");
                break;
            case 67: //c
                document.execCommand("Copy");
                break;
            case 88: //x
                document.execCommand("Cut");
                break;
            case 86: //v
                document.execCommand("Paste");
                break;
            case 90: //z
                document.execCommand("Undo");
                break;
            case 89: //y
                document.execCommand("Redo");
                break;
            default:
                break;
        }
        event.keyCode = 0;
        event.returnValue = false;
    }
    return;
}


function show_ln(){
    var txt_ln     = document.getElementById('txt_ln');
    var txt_main     = document.getElementById('txt_main');
    txt_ln.scrollTop = txt_main.scrollTop;
    while(txt_ln.scrollTop != txt_main.scrollTop) {
        txt_ln.value += (i++) + '\n';
        txt_ln.scrollTop = txt_main.scrollTop;
    }
    return;
}


function editTab(){
    var code, sel, tmp, r
    var tabs=''
    event.returnValue = false
    sel =event.srcElement.document.selection.createRange()
    r = event.srcElement.createTextRange()

    switch (event.keyCode){
        case (8)    :
            if (!(sel.getClientRects().length > 1)){
                event.returnValue = true
                return
            }
            code = sel.text
            tmp = sel.duplicate()
            tmp.moveToPoint(r.getBoundingClientRect().left, sel.getClientRects()[0].top)
            // 出错验代码~~~~~~
            if(sel.parentElement() != tmp.parentElement()) return;
            sel.setEndPoint('startToStart', tmp)
            sel.text = sel.text.replace(/^\t/gm, '')
            code = code.replace(/^\t/gm, '').replace(/\r\n/g, '\r')
            r.findText(code)
            r.select()
            break
        case (9)    :
            if (sel.getClientRects().length > 1){
                code = sel.text
                tmp = sel.duplicate()
                tmp.moveToPoint(r.getBoundingClientRect().left, sel.getClientRects()[0].top)
                // 出错验代码~~~~~~
                if(sel.parentElement() != tmp.parentElement()) return;
                sel.setEndPoint('startToStart', tmp)
                sel.text = '\t'+sel.text.replace(/\r\n/g, '\r\t')
                code = code.replace(/\r\n/g, '\r\t')
                r.findText(code)
                r.select()
            }else{
                sel.text = '\t'
                sel.select()
            }
            break
        case (13)    :
            tmp = sel.duplicate()
            tmp.moveToPoint(r.getBoundingClientRect().left, sel.getClientRects()[0].top)
            // 出错验代码~~~~~~
            if(sel.parentElement() != tmp.parentElement()) return;
            tmp.setEndPoint('endToEnd', sel)
            for (var i=0; tmp.text.match(/^[\t]+/g) && i<tmp.text.match(/^[\t]+/g)[0].length; i++)    tabs += '\t'
            sel.text = '\r\n'+tabs
            sel.select()
            break
        default        :
            event.returnValue = true
            break;
    }
    return;
}


function runcode() {
    var str = document.getElementById("txt_main").value;
    var code_win = window.open('about:blank');
    code_win.document.open();
    code_win.document.writeln("<script>");
    code_win.document.writeln("function reportError(msg,url,line){\nline-=14;\nvar str='You have found an error as below: \\n\\n';\nstr+='Err: '+msg+' on line: '+(line);\nalert(str);\nopener.goto(line);\nopener.focus();\nwindow.onerror=null;\nsetTimeout('self.close()',10);\nreturn true;\n}");
    code_win.document.writeln("window.onerror = reportError;");
    code_win.document.writeln("<\/script>");
    code_win.document.writeln(str);
    code_win.document.close();
    return;
}


function savecode() {
    var str = document.getElementById("txt_main").value;
    var code_win = window.open('about:blank','_blank','top=10000');
    code_win.document.open();
    code_win.document.writeln(str);
    code_win.document.close();
    code_win.document.execCommand('saveas','','code.html');
    code_win.close();
    return;
}


function goto(ln) {
    if(!/^\d+$/.test(ln)) return;
    var obj = document.getElementById("txt_main");
    var rng = obj.createTextRange();
    var arr = obj.value.replace(/\r/, "").split(/\n/);
    if(ln>arr.length) ln = arr.length;
    var str_tmp = "";
    for(var i=0; i<ln-1; i++) {
        str_tmp += arr[i];
    }
    rng.moveStart('character',str_tmp.length+1);
    str_tmp = "";
    for(i=ln; i<arr.length; i++) {
        str_tmp += arr[i];
    }
    rng.moveEnd('character',-str_tmp.length);
    rng.select();
    return;
}

window.onload = function() {document.getElementById("txt_main").value = "<script>\nalert(')\n<\/script>";}
</script>
<BODY>
<table width='600' class='list' border='1' bgcolor='#eeeeee' bordercolorlight='#000000' bordercolordark='#FFFFFF' cellpadding='0' cellspacing='0'>
  <tr bgcolor='#cccccc'>
    <td colspan='2' height='20' align='center'><b>Debug Textarea</b></td>
  </tr>
  <tr>
    <td colspan='2'>
        <table width='95%' border='0' align='center' >
      <tr>
        <td align='center'><br />
          <textarea id='txt_ln' name='content' rows='10' style='width:40px;overflow:hidden;height:200px;border-right:0px;text-align:right;line-height:14px' onselectstart='this.nextSibling.focus();return false' readonly></textarea><textarea id='txt_main' name='content' rows='10' cols='80' onkeydown='editTab()' onkeyup='show_ln()' onscroll='show_ln()' wrap='off' style='overflow:auto;height:200px;padding-left:5px;border-left:0px;line-height:14px'></textarea>
          <script>for(var i=1; i<=20; i++) document.getElementById('txt_ln').value += i + '\n';</script>
        </td>
      </tr>
          <tr>
            <td align='center'><br />
              <input type='button' value=' q??' onclick='runcode()' accesskey='r'>&nbsp;&nbsp;
              <input type='button' value=' ??' onclick='savecode()' accesskey='s'>&nbsp;&nbsp;
              <input type='button' value=' ??' onclick="goto(prompt('Please input the line number', '1'))"  accesskey='g'>&nbsp;&nbsp;
            </td>
          </tr>
        </table>
    </td>
  </tr>
</table>
</BODY>
</HTML>


 



E序-人生 2006-06-28 13:55 发表评论
]]>
常用的正则表辑ּhttp://www.tkk7.com/myblogs/archive/2006/06/28/55529.htmlE序-人生E序-人生Wed, 28 Jun 2006 05:54:00 GMThttp://www.tkk7.com/myblogs/archive/2006/06/28/55529.htmlhttp://www.tkk7.com/myblogs/comments/55529.htmlhttp://www.tkk7.com/myblogs/archive/2006/06/28/55529.html#Feedback1http://www.tkk7.com/myblogs/comments/commentRss/55529.htmlhttp://www.tkk7.com/myblogs/services/trackbacks/55529.html正则表达式用于字W串处理Q表单验证等场合Q实用高效,但用到时L不太把握Q以致往往要上|查一番。我一些常用的表达式收藏在q里Q作备忘之用。本贴随时会更新?/p>

匚w中文字符的正则表辑ּQ?[\u4e00-\u9fa5]

匚w双字节字W?包括汉字在内)Q[^\x00-\xff]

应用Q计字W串的长度(一个双字节字符长度?QASCII字符?Q?/p>

String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}

匚wI的正则表辑ּQ\n[\s| ]*\r

匚wHTML标记的正则表辑ּQ?<(.*)>.*<\/\1>|<(.*) \/>/

匚w首尾I格的正则表辑ּQ?^\s*)|(\s*$)

应用Qjavascript中没有像vbscript那样的trim函数Q我们就可以利用q个表达式来实现Q如下:

String.prototype.trim = function()
{
return this.replace(/(^\s*)|(\s*$)/g, "");
}

利用正则表达式分解和转换IP地址Q?/p>

下面是利用正则表辑ּ匚wIP地址QƈIP地址转换成对应数值的JavascriptE序Q?/p>

function IP2V(ip)
{
re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匚wIP地址的正则表辑ּ
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
throw new Error("Not a valid IP address!")
}
}

不过上面的程序如果不用正则表辑ּQ而直接用split函数来分解可能更单,E序如下Q?/p>

var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是Q?+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))

匚wEmail地址的正则表辑ּQ\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

匚w|址URL的正则表辑ּQ?a href="http://([\w-]+\.)+[\w-]+(/[\w">http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

利用正则表达式去除字串中重复的字W的法E序Q?/p>

var s="abacabefgeeii"
var s1=s.replace(/(.).*\1/g,"$1")
var re=new RegExp("["+s1+"]","g")
var s2=s.replace(re,"")
alert(s1+s2) //l果为:abcefgi

我原来在CSDN上发贴寻求一个表辑ּ来实现去除重复字W的ҎQ最l没有找刎ͼq是我能惛_的最单的实现Ҏ。思\是用后向引用取出包括重复的字符Q再以重复的字符建立W二个表辑ּQ取C重复的字W,两者串q。这个方法对于字W顺序有要求的字W串可能不适用?/p>

得用正则表达式从URL地址中提取文件名的javascriptE序Q如下结果ؓpage1

s="s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2")
alert(s)

利用正则表达式限制网表单里的文本框输入内容Q?/p>

用正则表辑ּ限制只能输入中文Qonkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"

用正则表辑ּ限制只能输入全角字符Q?onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"

用正则表辑ּ限制只能输入数字Qonkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"

用正则表辑ּ限制只能输入数字和英文:onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"

一个正则表辑ּ是由普通字W(例如字符 a ?zQ以及特D字W(UCؓ元字W)l成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符丌Ӏ正则表辑ּ作ؓ一个模板,某个字W模式与所搜烦的字W串q行匚w?
q里有一些可能会遇到的正则表辑ּCZQ?
Visual Basic Scripting Edition 
VBScript 
匚w 

/^\[ \t]*$/ 
"^\[ \t]*$" 
匚w一个空白行。?

/\d{2}-\d{5}/ 
"\d{2}-\d{5}" 
验证一个ID L是否׃?位数字,一个连字符以及一?位数字组成。?

/<(.*)>.*<\/\1>/ 
"<(.*)>.*<\/\1>" 
匚w一?HTML 标记。?

下表是元字符及其在正则表辑ּ上下文中的行为的一个完整列表:
字符 
描述 


下一个字W标Cؓ一个特D字W、或一个原义字W、或一?后向引用、或一个八q制转义W。例如,'n' 匚w字符 "n"?\n' 匚w一个换行符。序?'\\' 匚w "\" ?"\(" 则匹?"("。?


匚w输入字符串的开始位|。如果设|了 RegExp 对象?Multiline 属性,^ 也匹?'\n' ?'\r' 之后的位|。?


匚w输入字符串的l束位置。如果设|了RegExp 对象?Multiline 属性,$ 也匹?'\n' ?'\r' 之前的位|。?


匚w前面的子表达式零ơ或多次。例如,zo* 能匹?"z" 以及 "zoo"?* {h于{0,}。?


匚w前面的子表达式一ơ或多次。例如,'zo+' 能匹?"zo" 以及 "zoo"Q但不能匚w "z"? {h?{1,}。?


匚w前面的子表达式零ơ或一ơ。例如,"do(es)?" 可以匚w "do" ?"does" 中的"do" ? {h?{0,1}。?

{n} 
n 是一个非负整数。匹配确定的 n ơ。例如,'o{2}' 不能匚w "Bob" 中的 'o'Q但是能匚w "food" 中的两个 o。?

{n,} 
n 是一个非负整数。至匹配n ơ。例如,'o{2,}' 不能匚w "Bob" 中的 'o'Q但能匹?"foooood" 中的所?o?o{1,}' {h?'o+'?o{0,}' 则等价于 'o*'。?

{n,m} 
m ?n 均ؓ非负整数Q其中n <= m。最匹?n ơ且最多匹?m ơ?"o{1,3}" 匹?"fooooood" 中的前三?o?o{0,1}' {h?'o?'。请注意在逗号和两个数之间不能有空根{?


当该字符紧跟在Q何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面Ӟ匚w模式是非贪婪的。非贪婪模式可能少的匹配所搜烦的字W串Q而默认的贪婪模式则尽可能多的匚w所搜烦的字W串。例如,对于字符?"oooo"Q?o+?' 匹配单?"o"Q?'o+' 匹配所?'o'。?


匚w?"\n" 之外的Q何单个字W。要匚w包括 '\n' 在内的Q何字W,请用象 '[.\n]' 的模式。?

(pattern) 
匚wpattern q获取这一匚w。所获取的匹配可以从产生?Matches 集合得到Q在VBScript 中?SubMatches 集合Q在Visual Basic Scripting Edition 中则使用 $0?9 属性。要匚w圆括号字W,请?'\(' ?'\)'。?

(?:pattern) 
匚w pattern 但不获取匚wl果Q也是说这是一个非获取匚wQ不q行存储供以后用。这在?"? 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 是一个比 'industry|industries' 更简略的表达式。?

(?=pattern) 
正向预查Q在M匚w pattern 的字W串开始处匚w查找字符丌Ӏ这是一个非获取匚wQ也是_该匹配不需要获取供以后使用。例如, 'Windows (?=95|98|NT|2000)' 能匹?"Windows 2000" 中的 "Windows" Q但不能匚w "Windows 3.1" 中的 "Windows"。预查不消耗字W,也就是说Q在一个匹配发生后Q在最后一ơ匹配之后立卛_始下一ơ匹配的搜烦Q而不是从包含预查的字W之后开始。?

(?!pattern) 
负向预查Q在M不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字W串开始处匚w查找字符丌Ӏ这是一个非获取匚wQ也是_该匹配不需要获取供以后使用。例?Windows (?!95|98|NT|2000)' 能匹?"Windows 3.1" 中的 "Windows"Q但不能匚w "Windows 2000" 中的 "Windows"。预查不消耗字W,也就是说Q在一个匹配发生后Q在最后一ơ匹配之后立卛_始下一ơ匹配的搜烦Q而不是从包含预查的字W之后开始?

x|y 
匚w x ?y。例如,'z|food' 能匹?"z" ?"food"?(z|f)ood' 则匹?"zood" ?"food"。?

[[I]xyz[/I]] 
字符集合。匹配所包含的Q意一个字W。例如, '[abc]' 可以匚w "plain" 中的 'a'。?

[^[I]xyz[/I]] 
负值字W集合。匹配未包含的Q意字W。例如, '[^abc]' 可以匚w "plain" 中的'p'。?

[[I]a-z[/I]] 
字符范围。匹配指定范围内的Q意字W。例如,'[a-z]' 可以匚w 'a' ?'z' 范围内的L写字母字符。?

[^[I]a-z[/I]] 
负值字W范围。匹配Q何不在指定范围内的Q意字W。例如,'[^a-z]' 可以匚wM不在 'a' ?'z' 范围内的L字符。?

\b 
匚w一个单词边界,也就是指单词和空格间的位|。例如, 'er\b' 可以匚w"never" 中的 'er'Q但不能匚w "verb" 中的 'er'。?

\B 
匚w非单词边界?er\B' 能匹?"verb" 中的 'er'Q但不能匚w "never" 中的 'er'。?

\cx 
匚w由x指明的控制字W。例如, \cM 匚w一?Control-M 或回车符?x 的值必Mؓ A-Z ?a-z 之一。否则,?c 视ؓ一个原义的 'c' 字符。?

\d 
匚w一个数字字W。等价于 [0-9]。?

\D 
匚w一个非数字字符。等价于 [^0-9]。?

\f 
匚w一个换늬。等价于 \x0c ?\cL。?

\n 
匚w一个换行符。等价于 \x0a ?\cJ。?

\r 
匚w一个回车符。等价于 \x0d ?\cM。?

\s 
匚wMI白字符Q包括空根{制表符、换늬{等。等价于 [ \f\n\r\t\v]。?

\S 
匚wM非空白字W。等价于 [^ \f\n\r\t\v]。?

\t 
匚w一个制表符。等价于 \x09 ?\cI。?

\v 
匚w一个垂直制表符。等价于 \x0b ?\cK。?

\w 
匚w包括下划U的M单词字符。等价于'[A-Za-z0-9_]'。?

\W 
匚wM非单词字W。等价于 '[^A-Za-z0-9_]'。?

\xn 
匚w nQ其?n 为十六进制{义倹{十六进制{义值必Mؓ定的两个数字长。例如, '\x41' 匚w "A"?\x041' 则等价于 '\x04' & "1"。正则表辑ּ中可以?ASCII ~码? 

\num 
匚w numQ其?num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匚w两个q箋的相同字W。?

\n 
标识一个八q制转义值或一个后向引用。如?\n 之前臛_ n 个获取的子表辑ּQ则 n 为后向引用。否则,如果 n 为八q制数字 (0-7)Q则 n Z个八q制转义倹{?

\nm 
标识一个八q制转义值或一个后向引用。如?\nm 之前臛_有is preceded by at least nm 个获取得子表辑ּQ则 nm 为后向引用。如?\nm 之前臛_?n 个获取,?n Z个后跟文?m 的后向引用。如果前面的条g都不满Q若  n ?m 均ؓ八进制数?(0-7)Q则 \nm 匹配八q制转义?nm。?

\nml 
如果 n 为八q制数字 (0-3)Q且 m ?l 均ؓ八进制数?(0-7)Q则匚w八进制{义?nml。?

\un 
匚w nQ其?n 是一个用四个十六q制数字表示?Unicode 字符。例如, \u00A9 匚w版权W号 (?)?

用正则表辑ּ判断输入的数字是否合?
作者:unknown 更新旉Q?2005-03-17    
 

<html>
<head>
<title>Untitled</title>
</head>

<body>
<?php
$in="2344";
if(ereg("^(-{0,1}|\+{0,1})[0-9]+(\.{0,1}[0-9]+)$",$in))
echo "Ok!";
else
echo "Sorry,Please input again!";
?>
<br>很简单的嘛!

</body>
</html>

 
 
则表辑ּ判断email和URL
作者:unknown 更新旉Q?2005-03-17    
 

<body  onload="f.a.select();">
<?php
echo 'a:'.htmlspecialchars($a);
echo '<br>a1:';
$a1 = eregi_replace('(^[_.][:alnum:]-]+@([[:alnum:]][[:alnum:]-]*.)+[[:alpha:]]{2,3}$)',' <a href="
mailto:\1">\1</a> ', $a) ;
echo htmlspecialchars($a1);
echo "<br>a1:$a1";

echo '<br>a2:';
$a2 = eregi_replace('([[:alnum:]]+://([[:alnum:]][[:alnum:]-]*\.)+[[:alpha:]]{2,3}([#\?/\\][^#\?/\\][:space:]][^[:space:]]*)?)',
      '<a href="\1" target="_blank">\1</a>', $a);
echo htmlspecialchars($a2);
echo "<br>a2:$a2";
// eregi('^[_.][:alnum:]-]+@([[:alnum:]][[:alnum:]-]*\.)+[[:alpha:]]{2,3}$',$a) or die("not a email");
?>

<form name="f">
<input  name="a" value="<?php echo $a; ?>">
<input type="submit" >
</form>

</body>   

 
 
在一个字W串中查扑֏一个字W串
作者:unknown 更新旉Q?2005-03-17    
 

<html>
<head><title>正则表达?lt;/title></head>
<body>
<a href="./">q回列表</a><br>
<form action="<?echo $PHP_SELF;?>" method="post">
?lt;input type="text" name="string" value="<?echo $string;?>">中查?lt;input type="text" name="query" value="<?echo $query;?>"><br>
<input type="radio" name="where" value="" <?if(!isset($where) or $where=="") echo "checked";?>>W二个字W串可以在第一个字W串的Q何位|?lt;br>
<input type="radio" name="where" value="^" <?if(isset($where) and $where=="^") echo "checked";?>>W一个字W串以第二个字符串开?lt;br>
<input type="radio" name="where" value="$" <?if(isset($where) and $where=="$") echo "checked";?>>W一个字W串以第二个字符串结?lt;br>
<input type="checkbox" name="case" value="case" <?if(isset($case)) echo "checked";?>>区分大小?lt;br>
<input type="submit" value="查询">
</form>
<?
if(isset($string) and isset($query) and $string<>"" and $query<>""){
    if(isset($case)){
        $func = "ereg";
    }
    else{
        $func = "eregi";
    }
    switch($where){
        case "^":
            $query = "^" . $query;
            break;
        case "$":
            $query .= "$";
            break;
    }
    eval("\$found = $func(\"$query\",\"$string\");");
    if($found){
        echo "扑ֈQ?;
    }
    else{
        echo "未找刎ͼ";
    }
}
?>
</body>
</html>

 
 
MM/DD/YYYY格式的日期{换ؓYYYY-MM-DD格式
作者:unknown 更新旉Q?2005-03-17    
 

<html>
<head><title>正则表达?lt;/title></head>
<body>
<a href="./">q回列表</a>
<form action="<? echo $PHP_SELF; ?>" method="post">
误入MM/DD/YYYY格式的日期:
<input type="text" name="date" value="<? echo $date; ?>">
<input type="submit" value="转换为YYYY-MM-DD格式">
</form>
<?
if(isset($date)){
    if ( ereg( "([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})", $date, $regs ) ) {
        echo $regs[0] . "的{换结果ؓQ? . $regs[3] . "-" . $regs[1] . "-" . $regs[2];
    } else {
        echo "$date 的日期格式不对!<br>";
    }
}
?>
</body>
</html>

 
 
对象与像素的选获得某个网上的所有超裢接
作者:unknown 更新旉Q?2005-03-17    
 

<html>
<head><title>正则表达?lt;/title></head>
<body>
<a href="./">q回列表</a><br>
<form action="<?echo $PHP_SELF;?>" method="post">
URLQ?lt;input type="text" name="url" value="<?echo $url?>"><input type="submit" value="获取所有裢?>
</form>
<?
if(isset($url)){
    echo "$url 有下列裢接:<br>";
    $fcontents = file($url);
    while(list(,$line)=each($fcontents)){
        while(eregi('(href[[:space:]]*=[[:space:]]*"?[[:alnum:]:@/._-]+"?)(.*)',$line,$regs)){
            $regs[1] = eregi_replace('(href[[:space:]]*=[[:space:]]*"?)([[:alnum:]:@/._-]+)("?)',"\\2",$regs[1]);
            echo "    $regs[1]<br>";
            $line = $regs[2];
        }
    }
}
?>
</body>
</html>

 
 
正则表达?regular expression)
作者:unknown 更新旉Q?2005-03-17    
 
前言

正则表达式是烦琐的,但是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。只要认真去阅读q些资料Q加上应用的时候进行一定的参考,掌握正则表达式不是问题?/p>

索引

1._引子
2._正则表达式的历史
3._正则表达式定?/p>

3.1_普通字W?br />3.2_非打印字W?br />3.3_Ҏ字符
3.4_限定W?br />3.5_定位W?br />3.6_选择
3.7_后向引用

4._各种操作W的q算优先U?br />5._全部W号解释
6._部分例子
7._正则表达式匹配规?/p>

7.1_基本模式匚w
7.2_字符?br />7.3_定重复出现


--------------------------------------------------------------------------------

1. 引子
  目前Q正则表辑ּ已经在很多Y件中得到q泛的应用,包括*nixQLinux, Unix{)QHP{操作系l,PHPQC#QJava{开发环境,以及很多的应用Y件中Q都可以看到正则表达式的影子?/p>

  正则表达式的使用Q可以通过单的办法来实现强大的功能。ؓ了简单有效而又不失强大Q造成了正则表辑ּ代码的难度较大,学习h也不是很ҎQ所以需要付Z些努力才行,入门之后参照一定的参考,使用hq是比较单有效的?/p>

例子Q?^.+@.+\\..+$

  q样的代码曾l多ơ把我自q吓退q。可能很多h也是被这L代码l吓跑的吧。l阅L文将让你也可以自由应用这L代码?/p>

  注意Q这里的W?部分跟前面的内容看v来似乎有些重复,目的是把前面表格里的部分重新描述了一ơ,目的是让q些内容更容易理解?/p>

2. 正则表达式的历史
  正则表达式的“祖先”可以一直上溯至对hcȝl系l如何工作的早期研究。Warren McCulloch ?Walter Pitts q两位神l生理学家研I出一U数学方式来描述q些经|络?br />  1956 q? 一位叫 Stephen Kleene 的数学家?McCulloch ?Pitts 早期工作的基上,发表了一标题ؓ“神l网事g的表C法”的论文Q引入了正则表达式的概念。正则表辑ּ是用来描述他称为“正则集的代数”的表达式,因此采用“正则表辑ּ”这个术语?/p>

  随后Q发现可以将q一工作应用于?Ken Thompson 的计搜索算法的一些早期研IӞKen Thompson ?Unix 的主要发明h。正则表辑ּ的第一个实用应用程序就?Unix 中的 qed ~辑器?/p>

  如他们所_剩下的就是众所周知的历史了。从那时L至现在正则表辑ּ都是Z文本的编辑器和搜索工具中的一个重要部分?/p>

 

3. 正则表达式定?br />  正则表达?regular expression)描述了一U字W串匚w的模式,可以用来查一个串是否含有某种子串、将匚w的子串做替换或者从某个串中取出W合某个条g的子串等?/p>

列目录时Q dir *.txt或ls *.txt中的*.txt׃是一个正则表辑ּ,因ؓq里*与正则式?的含义是不同的?
  正则表达式是由普通字W(例如字符 a ?zQ以及特D字W(UCؓ元字W)l成的文字模式。正则表辑ּ作ؓ一个模板,某个字W模式与所搜烦的字W串q行匚w?/p>

3.1 普通字W?br />  由所有那些未昑ּ指定为元字符的打印和非打印字W组成。这包括所有的大写和小写字母字W,所有数字,所有标点符号以及一些符受?

3.2 非打印字W?br />字符  含义
\cx  匚w由x指明的控制字W。例如, \cM 匚w一?Control-M 或回车符。x 的值必Mؓ A-Z ?a-z 之一。否则,?c 视ؓ一个原义的 'c' 字符?
\f  匚w一个换늬。等价于 \x0c ?\cL?
\n  匚w一个换行符。等价于 \x0a ?\cJ?
\r  匚w一个回车符。等价于 \x0d ?\cM?
\s  匚wMI白字符Q包括空根{制表符、换늬{等。等价于 [ \f\n\r\t\v]?
\S  匚wM非空白字W。等价于 [^ \f\n\r\t\v]?
\t  匚w一个制表符。等价于 \x09 ?\cI?
\v  匚w一个垂直制表符。等价于 \x0b ?\cK?

 
3.3 Ҏ字符
  所谓特D字W,是一些有Ҏ含义的字W,如上面说?*.txt"中的*Q简单的说就是表CZQ何字W串的意思。如果要查找文g名中有*的文Ӟ则需要对Q进行{义,卛_其前加一个\。ls \*.txt。正则表辑ּ有以下特D字W?br /> 

特别字符 说明
$ 匚w输入字符串的l尾位置。如果设|了 RegExp 对象?Multiline 属性,?$ 也匹?'\n' ?'\r'。要匚w $ 字符本nQ请使用 \$?
( ) 标记一个子表达式的开始和l束位置。子表达式可以获取供以后使用。要匚wq些字符Q请使用 \( ?\)?
* 匚w前面的子表达式零ơ或多次。要匚w * 字符Q请使用 \*?
+ 匚w前面的子表达式一ơ或多次。要匚w + 字符Q请使用 \+?
. 匚w除换行符 \n之外的Q何单字符。要匚w .Q请使用 \?
[  标记一个中括号表达式的开始。要匚w [Q请使用 \[?
? 匚w前面的子表达式零ơ或一ơ,或指明一个非贪婪限定W。要匚w ? 字符Q请使用 \??
\ 下一个字W标Cؓ或特D字W、或原义字符、或向后引用、或八进制{义符。例如, 'n' 匚w字符 'n'?\n' 匚w换行W。序?'\\' 匚w "\"Q?'\(' 则匹?"("?
^ 匚w输入字符串的开始位|,除非在方括号表达式中使用Q此时它表示不接受该字符集合。要匚w ^ 字符本nQ请使用 \^?
{ 标记限定W表辑ּ的开始。要匚w {Q请使用 \{?
| 指明两项之间的一个选择。要匚w |Q请使用 \|?

  构造正则表辑ּ的方法和创徏数学表达式的Ҏ一栗也是用多U元字符与操作符小的表辑ּl合在一h创徏更大的表辑ּ。正则表辑ּ的组件可以是单个的字W、字W集合、字W范围、字W间的选择或者所有这些组件的Ll合?
 

3.4 限定W?br />  限定W用来指定正则表辑ּ的一个给定组件必要出现多少ơ才能满_配。有*??或{n}或{n,}或{n,m}?U?br />*??限定W都是贪婪的Q因为它们会可能多的匹配文字,只有在它们的后面加上一?可以实现非贪婪或最匹配?br />  正则表达式的限定W有Q?br /> 字符  描述
*  匚w前面的子表达式零ơ或多次。例如,zo* 能匹?"z" 以及 "zoo"? {h于{0,}?
+  匚w前面的子表达式一ơ或多次。例如,'zo+' 能匹?"zo" 以及 "zoo"Q但不能匚w "z"? {h?{1,}?
?  匚w前面的子表达式零ơ或一ơ。例如,"do(es)?" 可以匚w "do" ?"does" 中的"do" ? {h?{0,1}?
{n}  n 是一个非负整数。匹配确定的 n ơ。例如,'o{2}' 不能匚w "Bob" 中的 'o'Q但是能匚w "food" 中的两个 o?
{n,}  n 是一个非负整数。至匹配n ơ。例如,'o{2,}' 不能匚w "Bob" 中的 'o'Q但能匹?"foooood" 中的所?o?o{1,}' {h?'o+'?o{0,}' 则等价于 'o*'?
{n,m}  m ?n 均ؓ非负整数Q其中n <= m。最匹?n ơ且最多匹?m ơ。例如,"o{1,3}" 匹?"fooooood" 中的前三?o?o{0,1}' {h?'o?'。请注意在逗号和两个数之间不能有空根{?

3.5 定位W?br />  用来描述字符串或单词的边界,^?分别指字W串的开始与l束Q\b描述单词的前或后边界Q\B表示非单词边界。不能对定位W用限定符?
3.6 选择
  用圆括号所有选择ҎhQ相ȝ选择之间用|分隔。但用圆括号会有一个副作用Q是相关的匹配会被缓存,此时可用?:攑֜W一个选项前来消除q种副作用?br />  其中?:是非捕获元之一Q还有两个非捕获元是?=?!Q这两个q有更多的含义,前者ؓ正向预查Q在M开始匹配圆括号内的正则表达式模式的位置来匹配搜索字W串Q后者ؓ负向预查Q在M开始不匚w该正则表辑ּ模式的位|来匚w搜烦字符丌Ӏ?
3.7 后向引用
  对一个正则表辑ּ模式或部分模式两Ҏ加圆括号导致相兛_配存储到一个时缓冲区中,所捕获的每个子匚w都按照在正则表达式模式中从左臛_所遇到的内容存储。存储子匚w的缓冲区~号?1 开始,q箋~号直至最?99 个子表达式。每个缓冲区都可以?'\n' 讉KQ其?n Z个标识特定缓冲区的一位或两位十进制数?br />  可以使用非捕获元字符 '?:', '?=', or '?!' 来忽略对相关匚w的保存?
4. 各种操作W的q算优先U?br />  相同优先U的从左到右q行q算Q不同优先的运先高后低。各U操作符的优先从高C如下Q?br /> 操作W?描述
\  转义W?
(), (?:), (?=), []  圆括号和Ҏ?
*, +, ?, {n}, {n,}, {n,m}  限定W?
^, $, \anymetacharacter  位置和顺?
|  “或”操?

5. 全部W号解释
字符  描述
\  下一个字W标Cؓ一个特D字W、或一个原义字W、或一?向后引用、或一个八q制转义W。例如,'n' 匚w字符 "n"?\n' 匚w一个换行符。序?'\\' 匚w "\" ?"\(" 则匹?"("?
^  匚w输入字符串的开始位|。如果设|了 RegExp 对象?Multiline 属性,^ 也匹?'\n' ?'\r' 之后的位|?
$  匚w输入字符串的l束位置。如果设|了RegExp 对象?Multiline 属性,$ 也匹?'\n' ?'\r' 之前的位|?
*  匚w前面的子表达式零ơ或多次。例如,zo* 能匹?"z" 以及 "zoo"? {h于{0,}?
+  匚w前面的子表达式一ơ或多次。例如,'zo+' 能匹?"zo" 以及 "zoo"Q但不能匚w "z"? {h?{1,}?
?  匚w前面的子表达式零ơ或一ơ。例如,"do(es)?" 可以匚w "do" ?"does" 中的"do" ? {h?{0,1}?
{n}  n 是一个非负整数。匹配确定的 n ơ。例如,'o{2}' 不能匚w "Bob" 中的 'o'Q但是能匚w "food" 中的两个 o?
{n,}  n 是一个非负整数。至匹配n ơ。例如,'o{2,}' 不能匚w "Bob" 中的 'o'Q但能匹?"foooood" 中的所?o?o{1,}' {h?'o+'?o{0,}' 则等价于 'o*'?
{n,m}  m ?n 均ؓ非负整数Q其中n <= m。最匹?n ơ且最多匹?m ơ。例如,"o{1,3}" 匹?"fooooood" 中的前三?o?o{0,1}' {h?'o?'。请注意在逗号和两个数之间不能有空根{?
?  当该字符紧跟在Q何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面Ӟ匚w模式是非贪婪的。非贪婪模式可能少的匹配所搜烦的字W串Q而默认的贪婪模式则尽可能多的匚w所搜烦的字W串。例如,对于字符?"oooo"Q?o+?' 匹配单?"o"Q?'o+' 匹配所?'o'?
.  匚w?"\n" 之外的Q何单个字W。要匚w包括 '\n' 在内的Q何字W,请用象 '[.\n]' 的模式?
(pattern)  匚w pattern q获取这一匚w。所获取的匹配可以从产生?Matches 集合得到Q在VBScript 中?SubMatches 集合Q在JScript 中则使用 $0?9 属性。要匚w圆括号字W,请?'\(' ?'\)'?
(?:pattern)  匚w pattern 但不获取匚wl果Q也是说这是一个非获取匚wQ不q行存储供以后用。这在?"? 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 是一个比 'industry|industries' 更简略的表达式?
(?=pattern)  正向预查Q在M匚w pattern 的字W串开始处匚w查找字符丌Ӏ这是一个非获取匚wQ也是_该匹配不需要获取供以后使用。例如,'Windows (?=95|98|NT|2000)' 能匹?"Windows 2000" 中的 "Windows" Q但不能匚w "Windows 3.1" 中的 "Windows"。预查不消耗字W,也就是说Q在一个匹配发生后Q在最后一ơ匹配之后立卛_始下一ơ匹配的搜烦Q而不是从包含预查的字W之后开始?
(?!pattern)  负向预查Q在M不匹?pattern 的字W串开始处匚w查找字符丌Ӏ这是一个非获取匚wQ也是_该匹配不需要获取供以后使用。例?Windows (?!95|98|NT|2000)' 能匹?"Windows 3.1" 中的 "Windows"Q但不能匚w "Windows 2000" 中的 "Windows"。预查不消耗字W,也就是说Q在一个匹配发生后Q在最后一ơ匹配之后立卛_始下一ơ匹配的搜烦Q而不是从包含预查的字W之后开?
x|y  匚w x ?y。例如,'z|food' 能匹?"z" ?"food"?(z|f)ood' 则匹?"zood" ?"food"?
[xyz]  字符集合。匹配所包含的Q意一个字W。例如, '[abc]' 可以匚w "plain" 中的 'a'?
[^xyz]  负值字W集合。匹配未包含的Q意字W。例如, '[^abc]' 可以匚w "plain" 中的'p'?
[a-z]  字符范围。匹配指定范围内的Q意字W。例如,'[a-z]' 可以匚w 'a' ?'z' 范围内的L写字母字符?
[^a-z]  负值字W范围。匹配Q何不在指定范围内的Q意字W。例如,'[^a-z]' 可以匚wM不在 'a' ?'z' 范围内的L字符?
\b  匚w一个单词边界,也就是指单词和空格间的位|。例如, 'er\b' 可以匚w"never" 中的 'er'Q但不能匚w "verb" 中的 'er'?
\B  匚w非单词边界?er\B' 能匹?"verb" 中的 'er'Q但不能匚w "never" 中的 'er'?
\cx  匚w?x 指明的控制字W。例如, \cM 匚w一?Control-M 或回车符。x 的值必Mؓ A-Z ?a-z 之一。否则,?c 视ؓ一个原义的 'c' 字符?
\d  匚w一个数字字W。等价于 [0-9]?
\D  匚w一个非数字字符。等价于 [^0-9]?
\f  匚w一个换늬。等价于 \x0c ?\cL?
\n  匚w一个换行符。等价于 \x0a ?\cJ?
\r  匚w一个回车符。等价于 \x0d ?\cM?
\s  匚wMI白字符Q包括空根{制表符、换늬{等。等价于 [ \f\n\r\t\v]?
\S  匚wM非空白字W。等价于 [^ \f\n\r\t\v]?
\t  匚w一个制表符。等价于 \x09 ?\cI?
\v  匚w一个垂直制表符。等价于 \x0b ?\cK?
\w  匚w包括下划U的M单词字符。等价于'[A-Za-z0-9_]'?
\W  匚wM非单词字W。等价于 '[^A-Za-z0-9_]'?
\xn  匚w nQ其?n 为十六进制{义倹{十六进制{义值必Mؓ定的两个数字长。例如,'\x41' 匚w "A"?\x041' 则等价于 '\x04' & "1"。正则表辑ּ中可以?ASCII ~码?
\num  匚w numQ其?num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匚w两个q箋的相同字W?
\n  标识一个八q制转义值或一个向后引用。如?\n 之前臛_ n 个获取的子表辑ּQ则 n 为向后引用。否则,如果 n 为八q制数字 (0-7)Q则 n Z个八q制转义倹{?
\nm  标识一个八q制转义值或一个向后引用。如?\nm 之前臛_?nm 个获得子表达式,?nm 为向后引用。如?\nm 之前臛_?n 个获取,?n Z个后跟文?m 的向后引用。如果前面的条g都不满Q若 n ?m 均ؓ八进制数?(0-7)Q则 \nm 匹配八q制转义?nm?
\nml  如果 n 为八q制数字 (0-3)Q且 m ?l 均ؓ八进制数?(0-7)Q则匚w八进制{义?nml?
\un  匚w nQ其?n 是一个用四个十六q制数字表示?Unicode 字符。例如, \u00A9 匚w版权W号 (?)?

 

6. 部分例子
正则表达?说明
/\b([a-z]+) \1\b/gi 一个单词连l出现的位置
/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/  一个URL解析为协议、域、端口及相对路径
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/ 定位章节的位|?
/[-a-z]/ A至z?6个字母再加一?受?
/ter\b/ 可匹配chapterQ而不能terminal
/\Bapt/ 可匹配chapterQ而不能aptitude
/Windows(?=95 |98 |NT )/ 可匹配Windows95或Windows98或WindowsNT,当找C个匹配后Q从Windows后面开始进行下一ơ的索匹配?

 

7. 正则表达式匹配规?br />7.1 基本模式匚w

  一切从最基本的开始。模式,是正规表辑ּ最基本的元素,它们是一l描q字W串特征的字W。模式可以很单,由普通的字符串组成,也可以非常复杂,往往用特D的字符表示一个范围内的字W、重复出玎ͼ或表CZ下文。例如:

^once

  q个模式包含一个特D的字符^Q表C模式只匹配那些以once开头的字符丌Ӏ例如该模式与字W串"once upon a time"匚wQ与"There once was a man from NewYork"不匹配。正如如^W号表示开头一P$W号用来匚w那些以给定模式结字符丌Ӏ?/p>

bucket$

  q个模式?Who kept all of this cash in a bucket"匚wQ与"buckets"不匹配。字W^?同时使用Ӟ表示_匚wQ字W串与模式一P。例如:

^bucket$

  只匹配字W串"bucket"。如果一个模式不包括^?Q那么它与Q何包含该模式的字W串匚w。例如:模式

once

与字W串

There once was a man from NewYork
Who kept all of his cash in a bucket.

是匹配的?/p>

  在该模式中的字母(o-n-c-e)是字面的字符Q也是_他们表示该字母本w,数字也是一L。其他一些稍微复杂的字符Q如标点W号和白字符Q空根{制表符{)Q要用到转义序列。所有的转义序列都用反斜?\)打头。制表符的{义序列是Q\t。所以如果我们要一个字W串是否以制表符开_可以用这个模式:

^\t

cM的,用\n表示“新行”,\r表示回R。其他的ҎW号Q可以用在前面加上反斜杠Q如反斜杠本w用\\表示Q句?用\.表示Q以此类推?/p>

7.2 字符?/p>

在INTERNET的程序中Q正规表辑ּ通常用来验证用户的输入。当用户提交一个FORM以后Q要判断输入的电话号码、地址、EMAIL地址、信用卡L{是否有效,用普通的Z字面的字W是不够的?/p>

所以要用一U更自由的描q我们要的模式的办法Q它是字符。要建立一个表C所有元韛_W的字符,把所有的元音字符攑֜一个方括号里:

[AaEeIiOoUu]

q个模式与Q何元韛_W匹配,但只能表CZ个字W。用q字号可以表CZ个字W的范围Q如Q?/p>

[a-z] //匚w所有的写字母
[A-Z] //匚w所有的大写字母
[a-zA-Z] //匚w所有的字母
[0-9] //匚w所有的数字
[0-9\.\-] //匚w所有的数字Q句号和减号
[ \f\r\t\n] //匚w所有的白字W?

同样的,q些也只表示一个字W,q是一个非帔R要的。如果要匚w一个由一个小写字母和一位数字组成的字符Ԍ比如"z2"?t6"?g7"Q但不是"ab2"?r2d3" ?b52"的话Q用q个模式Q?/p>

^[a-z][0-9]$

管[a-z]代表26个字母的范围Q但在这里它只能与第一个字W是写字母的字W串匚w?/p>

前面曄提到^表示字符串的开_但它q有另外一个含义。当在一l方括号里用^是,它表C“非”或“排除”的意思,常常用来剔除某个字符。还用前面的例子Q我们要求第一个字W不能是数字Q?/p>

^[^0-9][0-9]$

q个模式?&5"?g7"?-2"是匹配的Q但?12"?66"是不匚w的。下面是几个排除特定字符的例子:

[^a-z] //除了写字母以外的所有字W?
[^\\\/\^] //除了(\)(/)(^)之外的所有字W?
[^\"\'] //除了双引?")和单引号(')之外的所有字W?

Ҏ字符"." (点,句号)在正规表辑ּ中用来表C除了“新行”之外的所有字W。所以模?^.5$"与Q何两个字W的、以数字5l尾和以其他非“新行”字W开头的字符串匹配。模?."可以匚wM字符Ԍ除了IZ和只包括一个“新行”的字符丌Ӏ?/p>

PHP的正规表辑ּ有一些内|的通用字符,列表如下Q?/p>

字符?含义
[[:alpha:]] M字母
[[:digit:]] M数字
[[:alnum:]] M字母和数?
[[:space:]] M白字W?
[[:upper:]] M大写字母
[[:lower:]] M写字母
[[:punct:]] M标点W号
[[:xdigit:]] M16q制的数字,相当于[0-9a-fA-F]

7.3 定重复出现

到现在ؓ止,你已l知道如何去匚w一个字母或数字Q但更多的情况下Q可能要匚w一个单词或一l数字。一个单词有若干个字母组成,一l数字有若干个单数组成。跟在字W或字符后面的花括?{})用来定前面的内容的重复出现的次数?

字符?含义
^[a-zA-Z_]$ 所有的字母和下划线
^[[:alpha:]]{3}$ 所有的3个字母的单词
^a$ 字母a
^a{4}$ aaaa
^a{2,4}$ aa,aaa或aaaa
^a{1,3}$ a,aa或aaa
^a{2,}$ 包含多于两个a的字W串
^a{2,} 如:aardvark和aaabQ但apple不行
a{2,} 如:baad和aaaQ但Nantucket不行
\t{2} 两个制表W?
.{2} 所有的两个字符

q些例子描述了花括号的三U不同的用法。一个数字,{x}的意思是“前面的字符或字W簇只出现xơ”;一个数字加逗号Q{x,}的意思是“前面的内容出现x或更多的ơ数”;两个用逗号分隔的数字,{x,y}表示“前面的内容臛_出现xơ,但不过yơ”。我们可以把模式扩展到更多的单词或数字:

^[a-zA-Z0-9_]{1,}$ //所有包含一个以上的字母、数字或下划U的字符?
^[0-9]{1,}$ //所有的正数
^\-{0,1}[0-9]{1,}$ //所有的整数
^\-{0,1}[0-9]{0,}\.{0,1}[0-9]{0,}$ //所有的数

最后一个例子不太好理解Q是吗?q么看吧Q与所有以一个可选的负号(\-{0,1})开?^)、跟着0个或更多的数?[0-9]{0,})、和一个可选的数?\.{0,1})再跟?个或多个数字([0-9]{0,})Qƈ且没有其他Q何东?$)。下面你知道能够用的更ؓ单的Ҏ?/p>

Ҏ字符"?"与{0,1}是相{的Q它们都代表着Q?个或1个前面的内容”或“前面的内容是可选的”。所以刚才的例子可以化ؓQ?/p>

^\-?[0-9]{0,}\.?[0-9]{0,}$

Ҏ字符"*"与{0,}是相{的Q它们都代表着?个或多个前面的内容”。最后,字符"+"?{1,}是相{的Q表C?个或多个前面的内容”,所以上面的4个例子可以写成:

^[a-zA-Z0-9_]+$ //所有包含一个以上的字母、数字或下划U的字符?
^[0-9]+$ //所有的正数
^\-?[0-9]+$ //所有的整数
^\-?[0-9]*\.?[0-9]*$ //所有的数

当然qƈ不能从技术上降低正规表达式的复杂性,但可以它们更容易阅诅R?
 
 



E序-人生 2006-06-28 13:54 发表评论
]]>
վ֩ģ壺 ѹۿŮˮƵ| Ƶѹۿ| avվ߹ۿ| ĻƵ| պۺϾƷ| AV뾫Ʒ| ŮƵ.ַ| Ļ޹˾þþƷ| ѹվ߹ۿҪ| ҹ޸˾| ߳ѿƬ| ҹƵ| ߲91| ޳ɫWWWþվ| һѿ| Ʒ޳aƬ߹ۿ| ձַȫ߹ۿ| 츾һ| һҹߴ | aëƬѹۿ| ޾Ʒ| ѳߵӰ| 2021â| 99߹ۿ| йvideosԸ| Ƶȫ| ŮڵƵ | һƵ| ŷձ߹ۿ| ҹƵ| fc2˳Ƶ| AVۺ߹ۿ| պƵ| պƵƵվ| ޳AVƬ| ŮvƬ| Ʒ߲| ޹Ʒר| ҹƵ| ߹ۿѵһ| eeuss|