<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    ??? 今天算是又玩了回心跳,周六,門戶用的人比較少,所有更新了上星期開發的一些東西到一個子系統,通過websphere控制臺重啟此應用后,使用門戶訪問進去,一直報一個session過期的錯誤,自動跳轉重新登錄。認真檢查了下發布的類,都是在本地上測試通過的,怎么就一直報錯呢?而我對websphere portal的理解僅限于啟動、關閉服務的......一下子有點慌了,趕忙打電話請同事過來幫忙看看,手心冒汗啊。同事過來看也找不到問題所在,把原來更新上去的類,重新恢復到測試環境原始版本,發現還是同樣的問題。大家都有點摸不著頭腦了,門戶這一塊一直是公司的一個牛人負責的,立馬打電話過去問,根據文檔重啟,無效;殺進程,無效;必殺技,重啟兩臺機器,意味著oracle、DB2、portal server、websphere應用服務器全部要重新啟動。煎熬地等待重啟后,郁悶的是問題依舊。一幫人想了想,應該還是代碼問題,而不是環境上的問題,再認真檢查更新上去的幾個類,終于發現問題所在,門戶調用這個子系統的URL錯誤!!!不知道CVS上的代碼什么時候被人改過,此全局變量被改成了測試環境的,導致portal server訪問應用的時候發生訪問被拒絕要求重新登錄的錯誤。更改類,重新部署,重啟應用,終于一切正常了,阿門。

    ??? 總結下教訓:
    1.發布關乎應用全局的類時需要認真閱讀發布文檔,并檢查各關鍵變量,認真仔細
    2.目前CVS上的代碼需要進行代碼審查,并統一發布一個新版本
    3.對portal應該進行更多的了解,可惜公司不進行這方面的培訓,自己摸索真是沒頭緒
    4.遇到問題還是需要冷靜,盡量做到不慌,問題出現了,總可以解決,急也沒用,反而打亂了解決問題的思路。說的容易,做起來難啊。

    posted @ 2007-03-17 12:55 dennis 閱讀(679) | 評論 (0)編輯 收藏

    ??? 在W3C新的事件模型框架中,IE和Mozilla都實現了相應的版本,IE的是attachEvent和detachEvent來實現元素事件的添加和刪除,而Mozilla則是標準的addEventListener和 removeEventListener。在傳統的javascript事件模型中,我們沒辦法為一個頁面元素注冊多個事件,只有靠自己來實現觀察者模式。代碼來自《ajax in action》,我添加了注釋
    //命名空間
    var?jsEvent?=?new?Array();

    //構造函數
    jsEvent.EventRouter?=?function(el,eventType){
    ?
    //內部維護一個事件列表
    ?this.lsnrs?=?new?Array();
    ?
    this.el?=?el;
    ?el.eventRouter?
    =?this;
    ?
    //注冊回調函數
    ?el[eventType]?=?jsEvent.EventRouter.callback;
    };

    //添加事件
    jsEvent.EventRouter.prototype.addListener?=?function(lsnr){
    ?
    this.lsnrs.append(lsnr,true);?
    }?;

    //移除事件
    jsEvent.EventRouter.prototype.removeListener=
    function(lsnr){?
    this.lsnrs.remove(lsnr);?
    };?

    //通知所有事件
    jsEvent.EventRouter.prototype.notify?=?function(e){
    ?
    var?lsnrs?=?this.lsnrs;
    ?
    for(var?i=0;i<lsnrs.length;i++){
    ??
    var?lsnr?=?lsnrs[i];
    ??lsnr.call(
    this,e);
    ?}
    };
    //回調函數調用notify
    jsEvent.EventRouter.callback=function(event){
    ?
    var?e?=?event?||?window.event;
    ?
    var?router?=?this.eventRouter;
    ?router.notify(e);
    };

    Array.prototype.append?
    =?function(obj,nodup){
    ?
    if(nodup){?
    ??
    this[this.length]=obj;
    ?}
    };
    Array.prototype.remove?
    =?function(o)
    {
    ???
    var?i?=?this.indexOf(o);
    ???
    if?(i>-1)
    ??{
    ????
    this.splice(i,1);
    ???}
    ?????
    return?(i>-1);
    ???}??
    };?

    這里比較巧妙的就是
    ?el.eventRouter?=?this;
    //注冊回調函數
    ?el[eventType]?=?jsEvent.EventRouter.callback;

    首先給el元素添加屬性
    eventRouter是當前的EventRouter對象,然后,比如eventType假設為onclick,el是一個button元素,那么這里就是el[onclick]=jsEvent.EventRouter.callback;相當于el.onclick=jsEvent.EventRouter.callback;
    而請注意這個回調函數
    callback將首先得到元素的eventRouter對象,再調用此對象的notify方法觸發所有注冊的事件。

    再請注意notify函數里面這一行:
    ?lsnr.call(this,e);

    我們把event對象傳入此函數作參,而
    var?e?=?event?||?window.event;那么所有事件函數的第一個參數都將是event對象,避免了IE需要通過window.event得到的事件對象的瀏覽器不一致行為。

    使用此對象方式:
     var?mat=document.getElementById('mousemat');
      cursor
    =document.getElementById('cursor');
      
    var?mouseRouter=new?jsEvent.EventRouter(mat,"onmousemove");
      mouseRouter.addListener(writeStatus);
      mouseRouter.addListener(drawThumbnail);?


    posted @ 2007-03-16 09:19 dennis 閱讀(1894) | 評論 (0)編輯 收藏

    來自javayeye的帖子,http://www.javaeye.com/topic/18648?page=1,運用設計模式很重要一點:模式應該帶來清晰并且易于理解的結構,而非大堆大堆的麻煩。如果是你發現變麻煩了,那是你的方法錯了。設計模式的異同不是通過結構,而是通過意圖和場景來理解,當然,如果真能達到應用中重神而非形的境界,就玄而又玄了。


    工廠模式是最重要的模式,因為大多數模式都需要用到工廠模式。如果不能正確的運用工廠模式,那么可以說無法成為合格的架構師。
    多數設計模式的內容講解的都是如何設計接口。
    接口如何產生呢?如果在客戶代碼(類庫的使用者稱之為客戶)中直接使用具體類,那么就失去了接口的意義。因為接口的使用目的,就是要降低客戶對具 體類的依賴程度。如果在客戶代碼中直接使用接口,那么就造成了客戶對具體類名稱的依賴。(客戶最終需要以某種方式指明所需要的具體類,如配置文件或代碼, 但是只需要指出一次,所以說降低對具體類的依賴程度)。要使客戶代碼不依賴具體類,唯一的方法,就是讓客戶代碼不依賴具體類的部分不知道具體類的名稱。知 道具體類名稱的部分,僅僅是配置部分。(配置文件或者配置代碼)。
    依賴不可能完全消除,除非二者毫無聯系。但是可以將這種依賴的程度降到最低。
    既然不能直接創建具體類,那么就需要通過一個創建者類來創建接口的實現類。這樣就產生了工廠類。
    那么現在已經知道工廠類存在的理由,抽象創建接口的過程。
    這樣,就可以使用簡單工廠。
    簡單工廠,一般是兩級結構。工廠類創建接口。
    隨著接口創建復雜性的增強,可能在接口創建的過程中,一個創建者類,無法承擔創建所有的接口類的職責。
    可能會有這樣的情況,我們定義了一個接口,有6個實現類分別是123456號。但是,這六個實現類不可能用一個工廠創建出來,因為123號是 windows下的實現,而456號是linux上的實現。(假設我們使用的語言不是廣大人民群眾熱愛的java語言),那么這個時候,我還需要客戶方用 相同的方式來創建這個借口,而不是在代碼中到處寫

    代碼
    ???? if ?(操作系統 == " windows " ){??
    ??????
    ????}??
    ?????
    else {??
    ??????
    ????}??

    那樣就太麻煩了。設計模式就是為了減少麻煩,而不是什么別的廢話,比如什么太極八卦、天人合一、面向xx之類的。因為怕麻煩,所以搞出設計模式這個咚咚減少麻煩。如果你發現用了設計模式更麻煩了,那么肯定是你用錯了。
    這個時候為了省事,我就把工廠也抽象成一個接口(因為我有兩個相似的工廠,如果只有一個,我還廢話什么呢),這樣就成了工廠方法。
    當然,既然工廠方法成了一個接口,那么當然也需要用一個工廠來創建它。這個時候,創建是三級結構,簡單工廠(此時是工廠的工廠)創建工廠接口(本來是個類,現在因為進一步的抽象,成為接口了),工廠接口創建產品。
    過了一段時間,隨著我們的工廠業務不斷發展,我們有了很多產品。
    比如,我們有錘子和釘子兩種產品。這兩種產品都有windows品牌和linux品牌的。我們給錘子和釘子各自定義了一個創建的接口。
    代碼
    ????interface?錘子工廠{??
    ????造錘子();??
    ????}??
    ????
    interface?釘子工廠{??
    ????造釘子();??
    ????}??

    可是,我們發現某些用戶,用windows的錘子去敲linux的釘子,從而把程序敲出了bug。這當然是我們的錯誤,因為我們違反了一條金科玉律:
    要想使你的程序穩定運行,你假設用戶是豬。
    所以,我們把錘子和釘子的工廠合并,讓一個工廠只能造出配套的錘子和釘子,這樣豬就沒有犯錯誤的機會了。
    于是我們搞出一個抽象工廠:
    interface?鐵匠鋪{
    造錘子();
    造釘子();
    }?

    當然,這個鐵匠鋪是個接口,所以同樣需要用一個工廠來創建它。所以,這個時候,工廠還是三級結構。
    我們的工廠,業務很多,而且產品一般都是配套使用的(這樣可以多騙點錢),所以,我們大多數情況下,都是使用抽象工廠和簡單工廠。簡單工廠用來創建工廠,抽象工廠創建產品。
    工廠的作用,就是創建接口。
    其實我們不知道什么是設計模式,我們只是怕麻煩。什么是麻煩呢?
    我們覺得把同樣的代碼寫兩遍就非常麻煩。所以,我們寧可多寫幾句,也要解決麻煩。豬不怕麻煩,可以日復一日的重復相同的事情,可是我們不是豬。

    posted @ 2007-03-15 15:47 dennis 閱讀(1626) | 評論 (0)編輯 收藏

    ??? 近幾日重讀《ajax實戰》,對AJAX技術的理解有點改變。當ajax開始火熱的時候,其實那時我呆的那家公司早在02年時就已經開始用XmlHttpRequest做前后臺的異步通信,因為做的是內部網應用,通過統一安裝一個delphi寫ActiveX表格控件來進行數據的展現和報表的打印,使用xml作為前后臺交換數據的格式。所以當ajax技術開始火熱的時候,我以為,我所做的就是ajax應用。買了《ajax實戰》,讀的也不深入,特別是前面幾個章節讀的半懂不懂,因為那時的我對javascript和設計模式等方面還沒有深入系統的學習過。

    ??? 我們都知道ajax是javascript、css、DOM和XmlHttpRequest的結合體,可使用了這些技術的應用就一定是ajax嗎?《ajax實戰》提出了衡量是否是ajax應用的四條標準:

    1 瀏覽器中的是應用,而不是內容;
    2 服務器交付的是數據,而不是內容;
    3 用戶和應用的交互是連續的,大部分對于服務器的請求是隱式的而不是顯式的;
    4 代碼庫式巨大的、復雜的,而且式組織良好的,這個特點對于架構來說非常重要,需要認真對待。

    如果以這樣的標準衡量,其實我們的很多自以為是ajax應用并非是嚴格意義上的ajax應用,軟件的應用可以劃分為瞬態的和獨占的,比如china-pub網站,這只是個瞬態應用,我們只是偶爾去訪問它,對交互的連續性也沒有很強的要求;而另外如word、excel之類的應用,需要持續不斷的交互,我們點下某個按鈕,總是期待能馬上有個效果出來,這樣的應用就是所謂的獨占應用。ajax技術已經在很廣泛的瞬態應用中實施,而ajax的趨勢是否就是獨占式應用?gmail和google map給出了答案,以及現在比較火熱的web office等。可我對于此類應用的前景并不看好,像word之類的應用,對于實時性和安全性的要求是比較高的,而當前網絡環境下的延遲和安全問題,會給此類應用帶來相當大的隱憂。而實現這樣的獨占式應用,帶來的也是服務器非常巨大的并發量,gmail就是個典型的例子,當你操作非常頻繁的時候,容易出現莫名其妙的錯誤。

    ??? 我仍然認為ajax應該成為目前web應用的潤滑劑,它應該應用在細節上改善用戶體驗上,而非徹底取代桌面應用,也不可能取代。

    posted @ 2007-03-14 18:56 dennis 閱讀(1257) | 評論 (3)編輯 收藏

         摘要: Apache和tomcat的集群和負載均衡配置  閱讀全文

    posted @ 2007-03-13 18:05 dennis 閱讀(4404) | 評論 (10)編輯 收藏

    1.讀完《javascript高級程序設計》后,自己覺的js功力大有長進,準備再重讀下《ajax in action》,去年讀這本書的時候,對javascript、dom、css、XmlHttpRequest和設計模式的了解還很有限,對于前面幾個章節特別是介紹重構ajax的章節讀的半懂不懂,是需要重新思考下ajax技術的位置。

    2.繼續讀《設計模式》,將書中的C++例子改寫為java例子加深理解。

    3.學習rails 1.2,rails1.2出來有一段時間了,我機器上的版本仍然停留在1.1.6,準備徹底搞明白到底什么是REST架構

    4.對java高級主題的探索學習,如portal、JTS、web service等。

    posted @ 2007-03-12 11:56 dennis 閱讀(674) | 評論 (0)編輯 收藏

    表格排序,一般的處理方法是傳遞排序的字段到后臺進行重新查詢并排序,javascript也可以做到簡單的表格排序,備忘代碼:
    ?????????? //類型轉換器,將列的字段類型轉換為可以排序的類型:String,int,float
    ????????????function?convert(sValue,?sDataType)?{
    ????????????????
    switch(sDataType)?{
    ????????????????????
    case?"int":
    ????????????????????????
    return?parseInt(sValue);
    ????????????????????
    case?"float":
    ????????????????????????
    return?parseFloat(sValue);
    ????????????????????
    case?"date":
    ????????????????????????
    return?new?Date(Date.parse(sValue));
    ????????????????????
    default:
    ????????????????????????
    return?sValue.toString();
    ????????????????
    ????????????????}
    ????????????}
    ????????????
    ????????????
    //排序函數產生器,iCol表示列索引,sDataType表示該列的數據類型
    ????????????function?generateCompareTRs(iCol,?sDataType)?{
    ????????
    ????????????????
    return??function?compareTRs(oTR1,?oTR2)?{
    ????????????????????????????
    var?vValue1?=?convert(oTR1.cells[iCol].firstChild.nodeValue,?sDataType);
    ????????????????????????????
    var?vValue2?=?convert(oTR2.cells[iCol].firstChild.nodeValue,?sDataType);
    ????????
    ????????????????????????????
    if?(vValue1?<?vValue2)?{
    ????????????????????????????????
    return?-1;
    ????????????????????????????}?
    else?if?(vValue1?>?vValue2)?{
    ????????????????????????????????
    return?1;
    ????????????????????????????}?
    else?{
    ????????????????????????????????
    return?0;
    ????????????????????????????}
    ????????????????????????};
    ????????????}
    ????????????
    ????????????
    //排序方法
    ????????????function?sortTable(sTableID,?iCol,?sDataType)?{
    ????????????????
    var?oTable?=?document.getElementById(sTableID);
    ????????????????
    var?oTBody?=?oTable.tBodies[0];
    ????????????????
    var?colDataRows?=?oTBody.rows;
    ????????????????
    var?aTRs?=?new?Array;
    ????????????????
    ????????????????
    //將所有列放入數組
    ????????????????for?(var?i=0;?i?<?colDataRows.length;?i++)?{
    ????????????????????aTRs[i]?
    =?colDataRows[i];
    ????????????????}
    ?????????????????
    ????????????????
    //判斷最后一次排序的列是否與現在要進行排序的列相同,是的話,直接使用reverse()逆序
    ????????????????if?(oTable.sortCol?==?iCol)?{
    ????????????????????aTRs.reverse();
    ????????????????}?
    else?{
    ????????????????????
    //使用數組的sort方法,傳進排序函數
    ????????????????????aTRs.sort(generateCompareTRs(iCol,?sDataType));
    ????????????????}
    ????????
    ????????????????
    var?oFragment?=?document.createDocumentFragment();
    ????????????????
    for?(var?i=0;?i?<?aTRs.length;?i++)?{
    ????????????????????oFragment.appendChild(aTRs[i]);
    ????????????????}
    ???????
    ????????????????oTBody.appendChild(oFragment);
    ????????????????
    //記錄最后一次排序的列索引
    ????????????????oTable.sortCol?=?iCol;
    ????????????}

    完整例子:
    <html>
    ????
    <head>
    ????
    <title>Table?Sort?Example</title>
    ????????
    <script?type="text/javascript">
    ????????????
    ????????????
    //轉換器,將列的字段類型轉換為可以排序的類型:String,int,float
    ????????????function?convert(sValue,?sDataType)?{
    ????????????????
    switch(sDataType)?{
    ????????????????????
    case?"int":
    ????????????????????????
    return?parseInt(sValue);
    ????????????????????
    case?"float":
    ????????????????????????
    return?parseFloat(sValue);
    ????????????????????
    case?"date":
    ????????????????????????
    return?new?Date(Date.parse(sValue));
    ????????????????????
    default:
    ????????????????????????
    return?sValue.toString();
    ????????????????
    ????????????????}
    ????????????}
    ????????????
    ????????????
    //排序函數產生器,iCol表示列索引,sDataType表示該列的數據類型
    ????????????function?generateCompareTRs(iCol,?sDataType)?{
    ????????
    ????????????????
    return??function?compareTRs(oTR1,?oTR2)?{
    ????????????????????????????
    var?vValue1?=?convert(oTR1.cells[iCol].firstChild.nodeValue,?sDataType);
    ????????????????????????????
    var?vValue2?=?convert(oTR2.cells[iCol].firstChild.nodeValue,?sDataType);
    ????????
    ????????????????????????????
    if?(vValue1?<?vValue2)?{
    ????????????????????????????????
    return?-1;
    ????????????????????????????}?
    else?if?(vValue1?>?vValue2)?{
    ????????????????????????????????
    return?1;
    ????????????????????????????}?
    else?{
    ????????????????????????????????
    return?0;
    ????????????????????????????}
    ????????????????????????};
    ????????????}
    ????????????
    ????????????
    //排序方法
    ????????????function?sortTable(sTableID,?iCol,?sDataType)?{
    ????????????????
    var?oTable?=?document.getElementById(sTableID);
    ????????????????
    var?oTBody?=?oTable.tBodies[0];
    ????????????????
    var?colDataRows?=?oTBody.rows;
    ????????????????
    var?aTRs?=?new?Array;
    ????????????????
    ????????????????
    //將所有列放入數組
    ????????????????for?(var?i=0;?i?<?colDataRows.length;?i++)?{
    ????????????????????aTRs[i]?
    =?colDataRows[i];
    ????????????????}
    ?????????????????
    ????????????????
    //判斷最后一次排序的列是否與現在要進行排序的列相同,是的話,直接使用reverse()逆序
    ????????????????if?(oTable.sortCol?==?iCol)?{
    ????????????????????aTRs.reverse();
    ????????????????}?
    else?{
    ????????????????????
    //使用數組的sort方法,傳進排序函數
    ????????????????????aTRs.sort(generateCompareTRs(iCol,?sDataType));
    ????????????????}
    ????????
    ????????????????
    var?oFragment?=?document.createDocumentFragment();
    ????????????????
    for?(var?i=0;?i?<?aTRs.length;?i++)?{
    ????????????????????oFragment.appendChild(aTRs[i]);
    ????????????????}
    ???????
    ????????????????oTBody.appendChild(oFragment);
    ????????????????
    //記錄最后一次排序的列索引
    ????????????????oTable.sortCol?=?iCol;
    ????????????}

    ????????
    </script>
    ????
    </head>
    ????
    <body>
    ????????
    <p>Click?on?the?table?header?to?sort?in?ascending?order.</p>
    ????????
    <table?border="1"?id="tblSort">
    ????????????
    <thead>
    ????????????????
    <tr>
    ????????????????????
    <th?onclick="sortTable('tblSort',?0)"?
    ????????????????????????style
    ="cursor:pointer">Last?Name</th>
    ????????????????????
    <th?onclick="sortTable('tblSort',?1)"?
    ????????????????????????style
    ="cursor:pointer">First?Name</th>
    ????????????????????
    <th?onclick="sortTable('tblSort',?2,?'date')"?
    ????????????????????????style
    ="cursor:pointer">Birthday</th>
    ????????????????????
    <th?onclick="sortTable('tblSort',?3,?'int')"?
    ????????????????????????style
    ="cursor:pointer">Siblings</th>
    ????????????????
    </tr>
    ????????????
    </thead>
    ????????????
    <tbody>
    ????????????????
    <tr>
    ????????????????????
    <td>Smith</td>
    ????????????????????
    <td>John</td>
    ????????????????????
    <td>7/12/1978</td>
    ????????????????????
    <td>2</td>
    ????????????????
    </tr>
    ????????????????
    <tr>
    ????????????????????
    <td>Johnson</td>
    ????????????????????
    <td>Betty</td>
    ????????????????????
    <td>10/15/1977</td>
    ????????????????????
    <td>4</td>
    ????????????????
    </tr>
    ????????????????
    <tr>
    ????????????????????
    <td>Henderson</td>
    ????????????????????
    <td>Nathan</td>
    ????????????????????
    <td>2/25/1949</td>
    ????????????????????
    <td>1</td>
    ????????????????
    </tr>
    ????????????????
    <tr>
    ????????????????????
    <td>Williams</td>
    ????????????????????
    <td>James</td>
    ????????????????????
    <td>7/8/1980</td>
    ????????????????????
    <td>4</td>
    ????????????????
    </tr>
    ????????????????
    <tr>
    ????????????????????
    <td>Gilliam</td>
    ????????????????????
    <td>Michael</td>
    ????????????????????
    <td>7/22/1949</td>
    ????????????????????
    <td>1</td>
    ????????????????
    </tr>
    ????????????????
    <tr>
    ????????????????????
    <td>Walker</td>
    ????????????????????
    <td>Matthew</td>
    ????????????????????
    <td>1/14/2000</td>
    ????????????????????
    <td>3</td>
    ????????????????
    </tr>
    ????????????
    </tbody>
    ????????
    </table>????????
    ????
    </body>
    </html>

    posted @ 2007-03-10 17:26 dennis 閱讀(6321) | 評論 (1)編輯 收藏

         摘要: javacript中對xml dom的支持,與其他任何特性一樣面臨著瀏覽器兼容問題。一 IE中的XML DOM1.微軟通過ActiveX的MSXML庫提供了支持,通過:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->?var?oXmlDom?=?new...  閱讀全文

    posted @ 2007-03-09 10:21 dennis 閱讀(4275) | 評論 (1)編輯 收藏

         摘要: 使用MyEclipse編寫web service,并通過java與C#調用  閱讀全文

    posted @ 2007-03-07 18:13 dennis 閱讀(11132) | 評論 (17)編輯 收藏

    ??? 最近一直在讀《javascript高級程序設計》的正則表達式章節,終于對我一直搞不明白的正則表達式開始有點感覺了,別人寫的表達式基本也能看懂了,可要自己熟練地寫還需要多多練習。推薦一個學習正則表達式的地方,javaeye的正則表達式專欄以及正則表達式工作室

    常用正則表達式,掌握了規則,看懂這些表達式并不困難,當然,要達到熟練寫的程度就不那么容易了。

    匹配中文字符的正則表達式: [\u4e00-\u9fa5]

    匹配雙字節字符(包括漢字在內):[^\x00-\xff]

    應用:計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1)

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

    匹配空行的正則表達式:\n[\s| ]*\r

    匹配HTML標記的正則表達式:/<(.*)>.*<\/\1>|<(.*) \/>/

    匹配首尾空格的正則表達式:(^\s*)|(\s*$)

    應用:javascript中沒有像vbscript那樣的trim函數,我們就可以利用這個表達式來實現,如下:

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

    利用正則表達式分解和轉換IP地址:

    下面是利用正則表達式匹配IP地址,并將IP地址轉換成對應數值的Javascript程序:

    function IP2V(ip)
    {
    re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配IP地址的正則表達式
    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!")
    }
    }

    不過上面的程序如果不用正則表達式,而直接用split函數來分解可能更簡單,程序如下:

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

    匹配Email地址的正則表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

    匹配網址URL的正則表達式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

    利用正則表達式去除字串中重復的字符的算法程序:

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

    我原來在CSDN上發貼尋求一個表達式來實現去除重復字符的方法,最終沒有找到,這是我能想到的最簡單的實現方法。思路是使用后向引用取出包括重復的字符,再以重復的字符建立第二個表達式,取到不重復的字符,兩者串連。這個方法對于字符順序有要求的字符串可能不適用。

    得用正則表達式從URL地址中提取文件名的javascript程序,如下結果為page1

    s="http://www.gzcynet/page1.htm"
    s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2")
    alert(s)

    利用正則表達式限制網頁表單里的文本框輸入內容:

    用正則表達式限制只能輸入中文:onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"

    用正則表達式限制只能輸入全角字符: onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"

    用正則表達式限制只能輸入數字:onkeyup="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,''))"


    posted @ 2007-03-07 09:54 dennis 閱讀(1749) | 評論 (1)編輯 收藏

    僅列出標題
    共56頁: First 上一頁 45 46 47 48 49 50 51 52 53 下一頁 Last 
    主站蜘蛛池模板: 国产天堂亚洲国产碰碰| 亚洲国产模特在线播放| 免费的黄网站男人的天堂| 国产男女猛烈无遮挡免费网站| 亚洲视频在线观看2018| 无码永久免费AV网站| 亚洲中文字幕一二三四区| 成人免费视频一区| mm1313亚洲国产精品无码试看 | 波多野结衣中文字幕免费视频| 亚洲AV成人片色在线观看高潮| 久久久久成人片免费观看蜜芽| 亚洲综合精品一二三区在线| 在线观看H网址免费入口| 亚洲色偷偷综合亚洲AV伊人蜜桃| 免费毛片在线视频| www.av在线免费观看| 亚洲国产精品无码久久SM| 精品无码国产污污污免费网站 | 国产在线观看免费不卡| 一区免费在线观看| 国产精品亚洲成在人线| 67194成手机免费观看| 亚洲熟妇自偷自拍另欧美| 全黄a免费一级毛片人人爱| 国产免费黄色无码视频| 亚洲今日精彩视频| 女人被男人桶得好爽免费视频| 特级毛片aaaa免费观看| 亚洲国产成人一区二区精品区 | 亚洲精品成人a在线观看| 最近2019中文免费字幕在线观看| 亚洲国产精品综合久久网各| 四虎永久免费地址在线观看| baoyu777永久免费视频 | 特级毛片在线大全免费播放| 亚洲精品高清视频| 日本无吗免费一二区| 国产成人AV免费观看| 亚洲乱色伦图片区小说| 亚洲精品无码久久千人斩|