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

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

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

    love fish大鵬一曰同風(fēng)起,扶搖直上九萬里

    常用鏈接

    統(tǒng)計

    積分與排名

    friends

    link

    最新評論

    客戶端表單通用驗證CheckForm (轉(zhuǎn))

    ?
    /* ?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*
    *
    *????????????????????客戶端表單通用驗證CheckForm(oForm)
    *
    *???功能:通用驗證所有的表單元素.
    *
    *???使用:
    *???<script?language="JavaScript"?src="Check.js"?type="text/JavaScript"></script>
    *  <form?name="form1"?onsubmit="return?CheckForm(this)">
    *  <input?type="text"?name="id"?check="^\S+$"?warning="id不能為空,且不能含有空格">
    *  <input?type="submit">
    *  </form>
    *
    *???對text,password,hidden,file,textarea,select,radio,checkbox進(jìn)行合法性驗證
    *
    *???正則表達(dá)式示例:
    *???^\S+$?????????????????????不能為空,且不能含有空格
    *???\S{6,}????????????????????長度6位以上
    *???^\d+$?????????????????????數(shù)字
    *???^\d+(\.\d+)?$?????????????數(shù)字,允許小數(shù)點
    *???(.*)(\.jpg|\.bmp)$????????文件格式為jpg和bmp
    *???^\d{4}\-\d{1,2}-\d{1,2}$
    *???^(19|20)\d\d\-(0|1)\d\-(0|1|2|3)\d$
    *?????????????????????????????日期格式2005-5-8
    *???^0$???????????????????????必選一個
    *???^0{2,}$???????????????????選擇二個或以上
    *???^[\s|\S]{20,}$????????????不能為空,且不少于20字
    *???^[^\d\-_][\w\-]*[^\-_]$???用戶名格式
    *???^[\u4E00-\u9FA5]*$????????漢字
    *???^[^\d\-_][\w\-]*[^\-_]@[^\-][a-zA-Z\d\-]*[^\-](\.[^\-][a-zA-Z\d\-]*[^\-])*\.[a-zA-Z]{3}(\.[a-zA-Z]{2})?$
    *?????????????????????????????電子信箱
    *
    *???正則表達(dá)式內(nèi)容:
    *???字符???????????說明
    *???\?????????????將下一字符標(biāo)記為特殊字符、文本、反向引用或八進(jìn)制轉(zhuǎn)義符。例如,“n”匹配字符“n”。“\n”匹配換行符。序列“\\”匹配“\”,“\(”匹配“(”。
    *???^?????????????匹配輸入字符串開始的位置。如果設(shè)置了?RegExp?對象的?Multiline?屬性,^?還會與“\n”或“\r”之后的位置匹配。
    *???$?????????????匹配輸入字符串結(jié)尾的位置。如果設(shè)置了?RegExp?對象的?Multiline?屬性,$?還會與“\n”或“\r”之前的位置匹配。
    *???*?????????????零次或多次匹配前面的字符或子表達(dá)式。例如,zo*?匹配“z”和“zoo”。*?等效于?{0,}。
    *???+?????????????一次或多次匹配前面的字符或子表達(dá)式。例如,“zo+”與“zo”和“zoo”匹配,但與“z”不匹配。+?等效于?{1,}。
    *?????????????????零次或一次匹配前面的字符或子表達(dá)式。例如,“do(es)?”匹配“do”或“does”中的“do”。??等效于?{0,1}。
    *???{n}???????????n?是非負(fù)整數(shù)。正好匹配?n?次。例如,“o{2}”與“Bob”中的“o”不匹配,但與“food”中的兩個“o”匹配。
    *???{n,}??????????n?是非負(fù)整數(shù)。至少匹配?n?次。例如,“o{2,}”不匹配“Bob”中的“o”,而匹配“foooood”中的所有?o。'o{1,}'?等效于?'o+'。'o{0,}'?等效于?'o*'。
    *???{n,m}?????????m?和?n?是非負(fù)整數(shù),其中?n?<=?m。至少匹配?n?次,至多匹配?m?次。例如,“o{1,3}”匹配“fooooood”中的頭三個?o。'o{0,1}'?等效于?'o?'。注意:您不能將空格插入逗號和數(shù)字之間。
    *?????????????????當(dāng)此字符緊隨任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后時,匹配模式是“非貪心的”。“非貪心的”模式匹配搜索到的、盡可能短的字符串,而默認(rèn)的“貪心的”模式匹配搜索到的、盡可能長的字符串。例如,在字符串“oooo”中,“o+?”只匹配單個“o”,而“o+”匹配所有“o”。
    *???.?????????????匹配除“\n”之外的任何單個字符。若要匹配包括“\n”在內(nèi)的任意字符,請使用諸如“[\s\S]”之類的模式。
    *???(pattern)?????匹配?pattern?并捕獲該匹配的子表達(dá)式。可以使用?$0$9?屬性從結(jié)果“匹配”集合中檢索捕獲的匹配。若要匹配括號字符?(?),請使用“\(”或者“\)”。
    *???(?:pattern)???匹配?pattern?但不捕獲該匹配的子表達(dá)式,即它是一個非捕獲匹配,不存儲供以后使用的匹配。這對于用“或”字符?(|)?組合模式部件的情況很有用。例如,與“industry|industries”相比,“industr(?:y|?ies)”是一個更加經(jīng)濟的表達(dá)式。
    *???(?=pattern)???執(zhí)行正向預(yù)測先行搜索的子表達(dá)式,該表達(dá)式匹配處于匹配?pattern?的字符串的起始點的字符串。它是一個非捕獲匹配,即不能捕獲供以后使用的匹配。例如,“Windows?(?=95|?98|?NT|?2000)”與“Windows?2000”中的“Windows”匹配,但不與“Windows?3.1”中的“Windows”匹配。預(yù)測先行不占用字符,即發(fā)生匹配后,下一匹配的搜索緊隨上一匹配之后,而不是在組成預(yù)測先行的字符后。
    *???(?!pattern)???執(zhí)行反向預(yù)測先行搜索的子表達(dá)式,該表達(dá)式匹配不處于匹配?pattern?的字符串的起始點的搜索字符串。它是一個非捕獲匹配,即不能捕獲供以后使用的匹配。例如,“Windows?(?!95|?98|?NT|?2000)”與“Windows?3.1”中的“Windows”匹配,但不與“Windows?2000”中的“Windows”匹配。預(yù)測先行不占用字符,即發(fā)生匹配后,下一匹配的搜索緊隨上一匹配之后,而不是在組成預(yù)測先行的字符后。
    *???x|?y??????????與?x?或?y?匹配。例如,“z|?food”與“z”或“food”匹配。“(z|?f)ood”與“zood”或“food”匹配。
    *???[xyz]?????????字符集。匹配包含的任一字符。例如,“[abc]”匹配“plain”中的“a”。
    *???[^xyz]????????反向字符集。匹配未包含的任何字符。例如,“[^abc]”匹配“plain”中的“p”。
    *???[a-z]?????????字符范圍。匹配指定范圍內(nèi)的任何字符。例如,“[a-z]”匹配“a”到“z”范圍內(nèi)的任何小寫字母。
    *???[^a-z]????????反向范圍字符。匹配不在指定的范圍內(nèi)的任何字符。例如,“[^a-z]”匹配任何不在“a”到“z”范圍內(nèi)的任何字符。
    *???\b????????????匹配一個字邊界,即字與空格間的位置。例如,“er\b”匹配“never”中的“er”,但不匹配“verb”中的“er”。
    *???\B????????????非字邊界匹配。“er\B”匹配“verb”中的“er”,但不匹配“never”中的“er”。
    *???\cx???????????匹配由?x?指示的控制字符。例如,\cM?匹配一個?Control-M?或回車符。x?的值必須在?A-Z?或?a-z?之間。如果不是這樣,則假定?c?就是“c”字符本身。
    *???\d????????????數(shù)字字符匹配。等效于?[0-9]。
    *???\D????????????非數(shù)字字符匹配。等效于?[^0-9]。
    *???\f????????????換頁符匹配。等效于?\x0c?和?\cL。
    *???\n????????????換行符匹配。等效于?\x0a?和?\cJ。
    *???\r????????????匹配一個回車符。等效于?\x0d?和?\cM。
    *???\s????????????匹配任何空白字符,包括空格、制表符、換頁符等。與?[?\f\n\r\t\v]?等效。
    *???\S????????????匹配任何非空白字符。等價于?[^?\f\n\r\t\v]。
    *???\t????????????制表符匹配。與?\x09?和?\cI?等效。
    *???\v????????????垂直制表符匹配。與?\x0b?和?\cK?等效。
    *???\w????????????匹配任何字類字符,包括下劃線。與“[A-Za-z0-9_]”等效。
    *???\W????????????任何非字字符匹配。與“[^A-Za-z0-9_]”等效。
    *???\xn???????????匹配?n,此處的?n?是一個十六進(jìn)制轉(zhuǎn)義碼。十六進(jìn)制轉(zhuǎn)義碼必須正好是兩位數(shù)長。例如,“\x41”匹配“A”。“\x041”與“\x04”&“1”等效。允許在正則表達(dá)式中使用?ASCII?代碼。
    *???\num??????????匹配?num,此處的?num?是一個正整數(shù)。到捕獲匹配的反向引用。例如,“(.)\1”匹配兩個連續(xù)的相同字符。
    *???\n????????????標(biāo)識一個八進(jìn)制轉(zhuǎn)義碼或反向引用。如果?\n?前面至少有?n?個捕獲子表達(dá)式,那么?n?是反向引用。否則,如果?n?是八進(jìn)制數(shù)?(0-7),那么?n?是八進(jìn)制轉(zhuǎn)義碼。
    *???\nm???????????標(biāo)識一個八進(jìn)制轉(zhuǎn)義碼或反向引用。如果?\nm?前面至少有?nm?個捕獲子表達(dá)式,那么?nm?是反向引用。如果?\nm?前面至少有?n?個捕獲,那么?n?是反向引用,后面跟?m。如果前面的條件均不存在,那么當(dāng)?n?和?m?是八進(jìn)制數(shù)?(0-7)?時,\nm?匹配八進(jìn)制轉(zhuǎn)義碼?nm。
    *???\nml??????????當(dāng)?n?是八進(jìn)制數(shù)?(0-3),m?和?l?是八進(jìn)制數(shù)?(0-7)?時,匹配八進(jìn)制轉(zhuǎn)義碼?nml。
    *???\un???????????匹配?n,其中?n?是以四位十六進(jìn)制數(shù)表示的?Unicode?字符。例如,\u00A9?匹配版權(quán)符號?(\u00A9)。
    *
    *?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?
    */


    // 主函數(shù)
    function ?CheckForm(oForm)
    {
    ??
    var ?els? = ?oForm.elements;
    ??
    // 遍歷所有表元素
    ?? for ( var ?i = 0 ;i < els.length;i ++ )
    ??
    {
    ????
    // 是否需要驗證
    ???? if (els[i].check)
    ????
    {
    ??????
    // 取得驗證的正則字符串
    ?????? var ?sReg? = ?els[i].check;
    ??????
    // 取得表單的值,用通用取值函數(shù)
    ?????? var ?sVal? = ?GetValue(els[i]);
    ??????
    // 字符串->正則表達(dá)式,不區(qū)分大小寫
    ?????? var ?reg? = ? new ?RegExp(sReg, " i " );
    ??????
    if ( ! reg.test(sVal))
    ??????
    {
    ????????
    // 驗證不通過,彈出提示warning
    ????????alert(els[i].warning);
    ????????
    // 該表單元素取得焦點,用通用返回函數(shù)
    ????????GoBack(els[i])
    ????????
    return ? false ;
    ??????}

    ????}

    ??}

    }


    // 通用取值函數(shù)分三類進(jìn)行取值
    //
    (1)文本輸入框,直接取值el.value
    //
    (2)單多選,遍歷所有選項,取得被選中的個數(shù),返回結(jié)果"00"表示選中兩個
    //
    (3)單多下拉菜單,遍歷所有選項,取得被選中的個數(shù),返回結(jié)果"0"表示選中一個
    function ?GetValue(el)
    {
    ??
    // 取得表單元素的類型
    ?? var ?sType? = ?el.type;
    ??
    switch (sType)
    ??
    {
    ????
    case ? " text " :
    ????
    case ? " hidden " :
    ????
    case ? " password " :
    ????
    case ? " file " :
    ????
    case ? " textarea " :? return ?el.value;
    ????
    case ? " checkbox " :
    ????
    case ? " radio " :? return ?GetValueChoose(el);
    ????
    case ? " select-one " :
    ????
    case ? " select-multiple " :? return ?GetValueSel(el);
    ??}

    ??
    // 取得radio,checkbox的選中數(shù),用"0"來表示選中的個數(shù),我們寫正則的時候就可以通過0{1,}來表示選中個數(shù)
    ?? function ?GetValueChoose(el)
    ??
    {
    ????
    var ?sValue? = ? "" ;
    ????
    // 取得第一個元素的name,搜索這個元素組
    ???? var ?tmpels? = ?document.getElementsByName(el.name);
    ????
    for ( var ?i = 0 ;i < tmpels.length;i ++ )
    ????
    {
    ??????
    if (tmpels[i].checked)
    ??????
    {
    ????????sValue?
    += ? " 0 " ;
    ??????}

    ????}

    ????
    return ?sValue;
    ??}

    ??
    // 取得select的選中數(shù),用"0"來表示選中的個數(shù),我們寫正則的時候就可以通過0{1,}來表示選中個數(shù)
    ?? function ?GetValueSel(el)
    ??
    {
    ????
    var ?sValue? = ? "" ;
    ????
    for ( var ?i = 0 ;i < el.options.length;i ++ )
    ????
    {
    ??????
    // 單選下拉框提示選項設(shè)置為value=""
    ?????? if (el.options[i].selected? && ?el.options[i].value != "" )
    ??????
    {
    ????????sValue?
    += ? " 0 " ;
    ??????}

    ????}

    ????
    return ?sValue;
    ??}

    }


    // 通用返回函數(shù),驗證沒通過返回的效果.分三類進(jìn)行取值
    //
    (1)文本輸入框,光標(biāo)定位在文本輸入框的末尾
    //
    (2)單多選,第一選項取得焦點
    //
    (3)單多下拉菜單,取得焦點
    function ?GoBack(el)
    {
    ??
    // 取得表單元素的類型
    ?? var ?sType? = ?el.type;
    ??
    switch (sType)
    ??
    {
    ????
    case ? " text " :
    ????
    case ? " hidden " :
    ????
    case ? " password " :
    ????
    case ? " file " :
    ????
    case ? " textarea " :?el.focus(); var ?rng? = ?el.createTextRange();?rng.collapse( false );?rng.select();
    ????
    case ? " checkbox " :
    ????
    case ? " radio " :? var ?els? = ?document.getElementsByName(el.name);els[ 0 ].focus();
    ????
    case ? " select-one " :
    ????
    case ? " select-multiple " :el.focus();
    ??}

    }

    posted on 2006-07-24 15:31 liaojiyong 閱讀(589) 評論(0)  編輯  收藏 所屬分類: Ajax

    主站蜘蛛池模板: 日韩人妻一区二区三区免费| 国产精品怡红院永久免费| 亚洲区小说区激情区图片区| 欧洲人免费视频网站在线| 亚洲人成影院在线高清| 亚洲成网777777国产精品| 成全在线观看免费观看大全| 亚洲午夜精品在线| 亚洲第一区在线观看| 色影音免费色资源| www.av在线免费观看| 亚洲国产成人久久精品app| 亚洲成av人片一区二区三区| 182tv免费视视频线路一二三| 国产成人久久精品亚洲小说| 亚洲国产精品久久久久久| 日本免费v片一二三区| 日韩午夜理论免费TV影院| 黄网站色视频免费观看45分钟 | 国产又黄又爽又刺激的免费网址| a级毛片免费观看在线| 亚洲精品国产国语| 久久青青成人亚洲精品| 国产一级特黄高清免费大片| 8x网站免费入口在线观看| 一级特级女人18毛片免费视频| 亚洲午夜电影一区二区三区| 亚洲区小说区图片区| 成人网站免费观看| 午夜视频在线免费观看| 四虎成人精品国产永久免费无码| tom影院亚洲国产一区二区| 久久久久亚洲AV片无码| 亚洲乱码日产精品a级毛片久久| 久久受www免费人成_看片中文| 国产免费一级高清淫曰本片| 国产精品久久久久久亚洲小说| 亚洲女人影院想要爱| 久久精品国产亚洲av麻| 自拍偷自拍亚洲精品情侣| 免费国产人做人视频在线观看|