最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS使用正則表達(dá)式實現(xiàn)常用的表單驗證功能分析

 更新時間:2020年04月30日 10:36:24   作者:廖飛銀  
這篇文章主要介紹了JS使用正則表達(dá)式實現(xiàn)常用的表單驗證功能,結(jié)合實例形式分析了JS基于正則表達(dá)式的表單驗證功能原理、實現(xiàn)技巧與操作注意事項,需要的朋友可以參考下

本文實例講述了JS使用正則表達(dá)式實現(xiàn)常用的表單驗證功能。分享給大家供大家參考,具體如下:

表單驗證是一個網(wǎng)站或應(yīng)用的重點,一條合適的錯誤提示不僅可以減少無效信息錄入,更會給用戶留下良好的使用體驗。但表單設(shè)計千差萬別,用戶輸入更不可控。一方面,我們要減少出錯提示(這會引起用戶反感),而另一方面,我們則希望得到足夠多的有效信息。魚和熊掌如何兼得?

寫一個簡單的表單驗證:http://m.fzitv.net/article/185782.htm

從Google中,我們可以找到一些實用的方法:

  • 設(shè)計合適的提示信息;
  • 正則表達(dá)式篩選錯誤輸入。

如何將錯誤信息合適的展示給用戶,我想是見仁見智,需要根據(jù)具體項目具體分析(參考淘寶、京東等電商設(shè)計)。這里主要討論第二種方案:通過正則表達(dá)式最大限度的過濾用戶輸入

這里先列出我自己常用的正則表達(dá)式,然后在深入全面的學(xué)習(xí)它!

常用正則表達(dá)式

文本輸入(拒絕表情):/^[\u4e00-\u9fa5\w]+.*$/gi

密碼: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/

中文地址(以中文開始,包含英文字符、數(shù)字、括號):/^([\u4e00-\u9fa5])+[\u4e00-\u9fa5a-zA-Z0-9()()]*$/

身份證/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i

電子郵箱/^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/

傳真/^(\d{3,4}-)?\d{7,8}$/

網(wǎng)址/^([hH][tT]{2}[pP]:\/\/|[hH][tT]{2}[pP][sS]:\/\/)*(([A-Za-z0-9-~]+)\.)+([A-Za-z0-9-~\/])+$/

座機/^(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}$/

手機/^1[34578]\d{9}$/

郵編/^[1-9][0-9]{5}$/

通用驗證信息提示函數(shù)

  /**
   * @param {Object} $input 需要驗證的輸入項
   * @param {String} reg  正則表達(dá)式
   * @param {String} tips 提示信息
   */
  function isInfoValid($input, reg, tips) {
   var val = $input.val().trim();
   if(val == '') {
    $input.next().remove();
    $input.after('<span class="valid-error">*'+$input.siblings("label").text().trim()+'不能為空!<span>')
   }
   else if(reg && tips && !reg.test(val)) {
    $input.next().remove();
    $input.after('<span class="valid-error">'+ tips +'</span>')
   }else {
    $input.next().remove();
   }
  }

  // 可以這樣使用

  isInfoValid($zipCode, /^[1-9][0-9]{5}$/, '*請輸入正確的郵編!');

深入學(xué)習(xí)正則表達(dá)式

1. RegExp對象

有兩種方法實例化RegExp對象

  • 字面量

    var reg = /\bis\b/g; // 全局匹配單詞is

  • 構(gòu)造函數(shù)

    var reg = new RegEXP('\\bis\\b',g)

2. 修飾符

  • g:global全文搜索,不添加,搜索到第一個匹配停止 默認(rèn)false,只讀

  • i:ignore case 忽略大小寫, 默認(rèn)false,只讀

  • m:multiple lines 多行搜索 默認(rèn)false,只讀

  • lastIndex: 是當(dāng)前表達(dá)式匹配內(nèi)容的最后一個字符的下一個位置

  • source:正則表達(dá)式的文本字符串

    > var reg1 = /\w/gim;
    > reg1.source
    < "\w"
    

3. 元字符

正則表達(dá)式由兩種基本字符類型組成:

  1. 原義文本字符

    a,b,c,d..

  2. 元字符

    *+?$ ^ . | \ ( ){ } [ ]

    \t 水平制表符
    \v 垂直制表符
    \n 換行符
    \r 回車符
    \0 空字符
    \f 換頁符

4. 字符類

  • 我們可以使用元字符 [] 來構(gòu)建一個簡單的類

所謂類是指符合某些特征的對象,一個泛指,不是特指某個字符

表達(dá)式[abc]把字符a或b或c歸為一類,表達(dá)式可以匹配這類字符

  • 字符取反(^)

使用元字符 ^ 創(chuàng)建反向類

表達(dá)式[^abc] 表示 不是字符a或b或c的內(nèi)容

5. 范圍類

  • 使用[a-z]來連接兩個字符表示從a到z的任意字符,閉區(qū)間,包含a 和 z 本身

    > 'a1b2c3b4'.replace(/[a-z]/g, 'Q');
    < "Q1Q2Q3Q4"
    
  • 范圍類可以連寫 [a-zA-Z]

    > '2015-11-5'.replace(/[0-9-]/g, 'A')
    < "AAAAAAAAA"
    

6.預(yù)定義類及邊界

6.1 預(yù)定義類

字符 等價類 含義
. [^\r\n] 除了回車符和換行符以外的所有字符
\d [0-9] 數(shù)字字符
\D [^0-9] 非數(shù)字字符
\s [\t\n\x0B\f\r] 空白字符
\w [a-zA-Z_0-9] 單詞字符(字母數(shù)字下劃線)
\W [^a-zA-Z0-9_] 非單詞字符

6.2 邊界

字符 含義
^ 以XXXXX開始
$ 以xxxx結(jié)束
\b 單詞邊界
\B 非單詞邊界

7. 量詞

字符 含義
? 出現(xiàn)零次或一次(最多出現(xiàn)1次)
+ 出現(xiàn)一次或多次
* 出現(xiàn)零次或多次(任意
{n} 出現(xiàn)n次
{n,m} 出現(xiàn)n到m次
{n,} 至少出現(xiàn)n次

8.貪婪模式與非貪婪模式

8.1 貪婪模式

在正則表達(dá)式中,默認(rèn)盡可能多的匹配

> '1234678'.replace(/\d{3,6}/g, 'X')
< "X78"

8.2 非貪婪模式

讓正則表達(dá)誰盡可能少的匹配,也就是說一旦成功匹配就不再繼續(xù)嘗試

做法很簡單,在量詞后面加一個 ?即可

> '123456789'.match(/\d{3,5}?/g)
< ["123","456","789"]

9. 分組

9.1 分組

使用 ()可以達(dá)到分組的功能,使量詞作用于分組

> 'fayfayfayfsd'.replace(/(fay){3}/g, 'X')
< "Xfsd"

9.2 或

使用 | 表示 或

> 'ByronCasper'.replace(/Byron|Casper/g, 'X')
< "XX"

9.3 $引用,捕獲分組

  • 注意: 一定要加(),用$捕獲分組
> '2016-11-05'.replace(/(\d{4})-(\d{2})-(\d{2})/g,'$2-$3-$1')
< "05-11-2016"
  • 忽略分組

    不希望捕獲某些分組,只需要在分組內(nèi)加上 ?:

    (?:Byron).(ok)

PS:這里再為大家提供2款非常方便的正則表達(dá)式工具供大家參考使用:

JavaScript正則表達(dá)式在線測試工具:
http://tools.jb51.net/regex/javascript

正則表達(dá)式在線生成工具:
http://tools.jb51.net/regex/create_reg

更多關(guān)于jQuery相關(guān)內(nèi)容可查看本站專題:《jQuery正則表達(dá)式用法總結(jié)》、《jQuery字符串操作技巧總結(jié)》、《jQuery操作xml技巧總結(jié)》、《jQuery擴展技巧總結(jié)》、《jquery選擇器用法總結(jié)》及《jQuery常用插件及用法總結(jié)

希望本文所述對大家jQuery程序設(shè)計有所幫助。

相關(guān)文章

  • javascript設(shè)計模式 – 享元模式原理與用法實例分析

    javascript設(shè)計模式 – 享元模式原理與用法實例分析

    這篇文章主要介紹了javascript設(shè)計模式 – 享元模式,結(jié)合實例形式分析了javascript享元模式相關(guān)概念、原理、用法及操作注意事項,需要的朋友可以參考下
    2020-04-04
  • ES6 Promise.race的用法詳解

    ES6 Promise.race的用法詳解

    本文主要介紹了ES6 Promise.race的用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • 深入理解ES6的迭代器與生成器

    深入理解ES6的迭代器與生成器

    本篇文章主要介紹了深入理解ES6的迭代器與生成器,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 詳解JavaScript中的坐標(biāo)和距離

    詳解JavaScript中的坐標(biāo)和距離

    在前端開發(fā)中總會遇到各種各樣需要使用或計算坐標(biāo)和距離的情況,于是便有了整理記錄的想法,即加深了印象,又方便隨時查閱。
    2019-05-05
  • uniapp中使用計時器setInterval的場景與方法

    uniapp中使用計時器setInterval的場景與方法

    計時器在日常開發(fā)中經(jīng)常會遇到,下面這篇文章主要給大家介紹了關(guān)于uniapp中使用計時器setInterval的場景與方法,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • JavaScript 封裝一個tab效果源碼分享

    JavaScript 封裝一個tab效果源碼分享

    本文給大家分享javascript封裝一個tab效果源碼分享,感興趣的朋友一起來看看吧
    2015-09-09
  • JavaScript對URL進行編碼和解碼的三種方式

    JavaScript對URL進行編碼和解碼的三種方式

    本文詳細(xì)介紹了為何在URL中需要編碼,列舉了需要編碼的字符,以及JavaScript中的escape,encodeURI,encodeURIComponent三種編碼方式及其用途和注意事項,需要的朋友可以參考下
    2025-04-04
  • JS獲取當(dāng)前網(wǎng)頁大小以及屏幕分辨率等

    JS獲取當(dāng)前網(wǎng)頁大小以及屏幕分辨率等

    這篇文章主要介紹了JS獲取當(dāng)前網(wǎng)頁大小以及屏幕分辨率等,方法雖簡單,但比較實用,需要的朋友可以參考下
    2014-09-09
  • 為JavaScript添加重載函數(shù)的輔助方法

    為JavaScript添加重載函數(shù)的輔助方法

    大家都習(xí)慣了重載帶來的便利。JavaScript有沒有重載呢?有人會回答沒有,因為函數(shù)會被覆蓋;有人說有,我們可以模擬重載這 一操作。
    2010-07-07
  • layui點擊數(shù)據(jù)表格添加或刪除一行的例子

    layui點擊數(shù)據(jù)表格添加或刪除一行的例子

    今天小編就為大家分享一篇layui點擊數(shù)據(jù)表格添加或刪除一行的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09

最新評論

额尔古纳市| 准格尔旗| 夹江县| 饶阳县| 马公市| 两当县| 隆子县| 潮安县| 静海县| 清新县| 平凉市| 盖州市| 淮南市| 碌曲县| 塘沽区| 赣榆县| 连江县| 长武县| 荃湾区| 司法| 金湖县| 日照市| 晋宁县| 苗栗县| 道真| 深州市| 秦安县| 宽甸| 辰溪县| 洞头县| 虹口区| 饶河县| 双鸭山市| 定南县| 逊克县| 临江市| 延川县| 青阳县| 临沧市| 仪征市| 扶沟县|