亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript中的校驗(yàn)機(jī)制三種寫法舉例(如手機(jī)號(hào)碼、電話號(hào)碼校驗(yàn))

 更新時(shí)間:2025年04月23日 09:08:22   作者:outstanding木槿  
這篇文章主要給大家介紹了關(guān)于JavaScript中的校驗(yàn)機(jī)制三種寫法舉例,如手機(jī)號(hào)碼、電話號(hào)碼校驗(yàn),還提供了針對(duì)不同場(chǎng)景和需求的驗(yàn)證方法推薦,并討論了防抖優(yōu)化在頻繁校驗(yàn)場(chǎng)景中的應(yīng)用,需要的朋友可以參考下

 在表單驗(yàn)證場(chǎng)景中,getValueFromEventpattern 和 validator 是三種不同的驗(yàn)證機(jī)制

方法作用適用場(chǎng)景
getValueFromEvent從表單事件(如 onChange)中提取值,通常用于預(yù)處理輸入數(shù)據(jù)‌需要自定義事件值解析(如文件上傳)
pattern通過正則表達(dá)式對(duì)輸入值進(jìn)行格式校驗(yàn),屬于聲明式規(guī)則‌簡(jiǎn)單格式校驗(yàn)(如手機(jī)號(hào)、郵箱)
validator通過函數(shù)實(shí)現(xiàn)自定義邏輯驗(yàn)證,支持異步操作和復(fù)雜條件判斷‌動(dòng)態(tài)校驗(yàn)(如密碼強(qiáng)度、聯(lián)動(dòng)字段)

解析

第一位是【1】開頭,第二位則是【3,4,5,7,8】,第三位則是【0-9】,第三位之后則是數(shù)字【0-9】。從而我們可以得出一個(gè)符合當(dāng)前的手機(jī)號(hào)碼驗(yàn)證正則表達(dá)式(不適用電話)。

 ^1(3|4|5|7|8)\d{9}$  或者 ^1[34578]\d{9}$ 或 ^1[34578][0-9]{9}$ 或 ^1[3,4,5,7,8][0-9]{9}$

0. ^表示開始

1. 正則里面的中括號(hào)[]只能匹配其中一個(gè)

2. 如果要匹配特定幾組字符串的話,那就必須使用小括號(hào)()加或|

3. |在中括號(hào)里面也是一個(gè)字符,并不代表或

4. [3457]匹配3或者4或者5或者7,而(3457)把3457這四個(gè)數(shù)當(dāng)成整體匹配,若要跟前面一樣可以加或(3|4|5|7)。

5. [34|57]匹配3或者4或者|或者5或者7,而(34|57)匹配34或者57。

6. \d{9}:匹配9個(gè)數(shù)字(0~9任意組合9個(gè)數(shù)字)。其中,\d 代表一個(gè)數(shù)字字符,{9} 表示前面的模式(即 \d)應(yīng)重復(fù)9次。

總結(jié)‌

方案推薦度適用場(chǎng)景
rules + pattern?????簡(jiǎn)單正則驗(yàn)證(推薦)
rules + validator????復(fù)雜自定義驗(yàn)證
‌手動(dòng) checkPhone?遺留代碼或特殊需求

最佳實(shí)踐‌:優(yōu)先使用 Ant Design 的 rules 和 pattern,避免手動(dòng)操作 DOM 和 alert

寫法1:(不推薦)

function checkPhone(){ 
    var phone = document.getElementById('phone').value;
    if(!(/^1[34578]\d{9}$/.test(phone))){ 
        alert("手機(jī)號(hào)碼有誤,請(qǐng)重填");  
        return false; 
    } 
}
 
或者
function checkPhone(){ 
    var phone = document.getElementById('phone').value;
    var phoneRegex = /^1(3|4|5|7|8)\d{9}$/
    if(!(phoneRegex.test(phone))){ 
        alert("手機(jī)號(hào)碼有誤,請(qǐng)重填");  
        return false; 
    } 
}

// 在提交表單時(shí)調(diào)用
handleSubmit = (e) => {
  e.preventDefault();
  if (checkPhone()) {
    // 驗(yàn)證通過,提交表單
    this.props.form.validateFields((err, values) => {
      if (!err) {
        console.log('提交數(shù)據(jù):', values);
      }
    });
  }
};

// handleSubmit = () => {
//    const phone = document.getElementById('phone').value;
//    if (!this.checkPhone(phone)) {
//     alert("手機(jī)號(hào)碼有誤");  // 手動(dòng)觸發(fā)驗(yàn)證?
//   }
// };


const FormItem = Form.Item
<Row>
    <Col>
        <FormItem label='聯(lián)系電話'>
            {getFieldDecorator('phone', {
                rules:[{
                    required: true,
                    message: '請(qǐng)輸入正確的聯(lián)系電話!',
                }],
                initialValue: '',
            })(
                <Input id='phone' />
            )}
        </FormItem>
    </Col>
    <Button onClick={this.handleSubmit}>提交</Button>
</Row>

?? ‌缺點(diǎn)‌:

  • 直接操作 DOM(document.getElementById),不符合 React 的最佳實(shí)踐。
  • 錯(cuò)誤提示用 alert,用戶體驗(yàn)較差(Ant Design 的表單錯(cuò)誤提示更優(yōu)雅)。

寫法2:pattern 正則表達(dá)式

const FormItem = Form.Item
<Row>
    <Col>
        <FormItem label='聯(lián)系電話'>
            {getFieldDecorator('phone', {
                rules:[
                    { 
                        required: true, 
                        message: '請(qǐng)輸入聯(lián)系電話!' 
                    },
                    { 
                        pattern: /^1(3|4|5|7|8)\d{9}$/,
                        message: '請(qǐng)輸入11位有效手機(jī)號(hào)!' 
                    },
                    
                ],
                initialValue: '',
            })(
                <Input id='phone'  maxLength={11} />
            )}
        </FormItem>
    </Col>
    
</Row>

? ‌優(yōu)點(diǎn)‌:

  • 不需要額外寫 checkPhone 函數(shù),直接用 pattern 進(jìn)行正則驗(yàn)證。
  • Ant Design 會(huì)自動(dòng)處理錯(cuò)誤提示,不需要手動(dòng) alert。

寫法3:validator 自定義驗(yàn)證(更靈活)

(需求:除了漢字和字母不能輸入以外,其他的都可輸入)

const FormItem = Form.Item
<Row>
    <Col>
        <FormItem label='聯(lián)系電話'>
            {getFieldDecorator('phone', {
                rules:[
                    { 
                        required: true, 
                        message: '請(qǐng)輸入聯(lián)系電話!' 
                    },
                    { 
                       pattern: /^1[3-9]\d{9}$/, 
                        message: '請(qǐng)輸入11位有效手機(jī)號(hào)!' 
                    },
                    {
                    validator: (rule, value, callback) => {
                        const reg = new RegExp('[\u4E00-\u9FA5]')
                        const reg1 = new RegExp('[A-Za-z]')
                        if(reg.test(value)){
                            callback('手機(jī)號(hào)碼不能輸入漢字!')
                        } else if (reg1.test(value)){
                            callback('手機(jī)號(hào)碼不能輸入字母!')
                        } else {
                            callback()
                        }
                    }
                }],
            })(
                <Input id='phone' maxLength={11} />
            )}
        </FormItem>
    </Col>
    
</Row>

? ‌優(yōu)點(diǎn)‌:

  • 可以自定義更復(fù)雜的驗(yàn)證邏輯(如異步校驗(yàn))。
  • 仍然不需要手動(dòng)操作 DOM(document.getElementById)。

擴(kuò)展建議

國(guó)際號(hào)碼支持

若需支持國(guó)際號(hào)碼,可替換正則為:

pattern: /^(?:\+?86)?1[3-9]\d{9}$|^(?:\+?\d{1,3})?\d{6,15}$/

動(dòng)態(tài)校驗(yàn)

通過 setFieldsValue 實(shí)現(xiàn)聯(lián)動(dòng)校驗(yàn)(如區(qū)號(hào)+座機(jī)號(hào)場(chǎng)景)。

防抖優(yōu)化

頻繁校驗(yàn)時(shí)建議添加防抖:

import { debounce } from 'lodash'; 
validator: debounce((rule, value, callback) => { ... }, 300)

// 代碼:
rules: {
  username: [
    { required: true, message: '必填項(xiàng)' },
    { 
      validator: debounce((rule, value, callback) => {
        if (/[^a-z]/.test(value)) callback('僅允許小寫字母');
        else callback();
      }, 1000),
      trigger: 'blur'  // 明確防抖觸發(fā)條件。防抖場(chǎng)景必須聲明?:防抖函數(shù)需綁定明確的事件(如 blur 或 change)?
    }
  ]
}
場(chǎng)景防抖配置優(yōu)勢(shì)
輸入實(shí)時(shí)搜索delay: 300ms減少搜索接口調(diào)用‌
異步唯一性校驗(yàn)delay: 1000ms避免頻繁請(qǐng)求‌
多字段聯(lián)合校驗(yàn)共享防抖實(shí)例統(tǒng)一控制校驗(yàn)節(jié)奏‌
  • trigger: 'blur' 表示輸入框失去焦點(diǎn)時(shí)觸發(fā)校驗(yàn),適合實(shí)時(shí)性要求較低的場(chǎng)景(如避免輸入中途頻繁提示)‌17。
  • trigger: 'change' 會(huì)在值變化時(shí)立即校驗(yàn),適合需要即時(shí)反饋的交互(如密碼強(qiáng)度檢測(cè))‌
  • 場(chǎng)景是否需要顯式聲明原因
    需要實(shí)時(shí)校驗(yàn)可選(建議聲明)明確控制觸發(fā)時(shí)機(jī),避免依賴默認(rèn)行為‌
    僅提交時(shí)校驗(yàn)可不寫默認(rèn)行為已滿足需求‌
    防抖場(chǎng)景必須聲明防抖函數(shù)需綁定明確的事件觸發(fā)點(diǎn)(如 blur),否則無法生效‌

電話號(hào)碼校驗(yàn),上面的pattern方法、validator方法都適用

function phoneValid(number) {
    // 去除任何非數(shù)字字符
    const cleaned = number.replace(/\D/g, '');
 
    // 定義正則表達(dá)式驗(yàn)證規(guī)則
    const mobilePattern = /^1[3-9]\d{9}$/; // 手機(jī)號(hào)
    const tellPattern = /^0\d{2,3}-?\d{7,8}$/; // 電話號(hào)
 
    // 驗(yàn)證是否符合手機(jī)號(hào)碼或座機(jī)號(hào)碼格式
    if (mobilePattern.test(cleaned) || tellPattern.test(cleaned)) {
        return true;
    } else {
        return false;
    }
}
 
// 示例用法
console.log(phoneValid('13800138000')); // true
console.log(phoneValid('010-12345678')); // true
console.log(phoneValid('12345678')); // false
console.log(phoneValid('021-87654321')); // true
console.log(phoneValid('18912345678')); // true

空格校驗(yàn)

const FormItem = Form.Item
<Row>
    <Col>
        <FormItem label='聯(lián)系電話'>
            {getFieldDecorator('phone', {
                getValueFormEvent: (e) => e.target.value.replace(/^\s+|\s$/g,'')
                initialValue: '',
            })(
                <Input id='phone' />
            )}
        </FormItem>
    </Col>
    
</Row>


// "  hello world  ".replace(/^\s+|\s+$/g, ""); // 輸出 "hello world"?:ml-citation{ref="1,3" data="citationList"}
語法含義示例匹配場(chǎng)景
^\s+匹配字符串‌開頭‌的1個(gè)或多個(gè)空白字符(空格、制表符、換行符等)‌‌" hello" 中的開頭空格
\s+$匹配字符串‌末尾‌的1個(gè)或多個(gè)空白字符‌"world " 中的末尾空格
``邏輯“或”操作符,匹配兩者之一‌同時(shí)處理開頭和末尾空格
g全局匹配模式,替換所有符合條件的內(nèi)容(而非僅第一個(gè))‌

多次替換

  • \s
    匹配‌單個(gè)空白字符‌,包括:

    • 空格( 
    • 制表符(\t
    • 換行符(\n
    • 換頁符(\f)等‌。
      注:\S 表示其反向匹配(非空白字符)‌。
  • ^ 和 $

    • ^ 匹配字符串的‌起始位置‌(需在開頭)‌。
    • $ 匹配字符串的‌結(jié)束位置‌(需在末尾)‌。
  • +
    表示前面的字符(\s)‌至少出現(xiàn)1次‌(等價(jià)于 {1,})‌

  • 若需‌嚴(yán)格匹配純空格‌(不含制表符等),可用 [ ]+ 替代 \s+

  • 在拆分字符串時(shí),\s 常用于分割單詞(如 split(/\s+/))‌

  • 正則表達(dá)式作用區(qū)別
    /\s+/g匹配‌所有連續(xù)空白字符不限定位置,包括中間空格‌3
    /^\s+/g僅匹配‌開頭空白字符忽略末尾空格‌3
    /\s+$/g僅匹配‌末尾空白字符忽略開頭空格‌

總結(jié) 

到此這篇關(guān)于JavaScript中的校驗(yàn)機(jī)制三種寫法的文章就介紹到這了,更多相關(guān)JS手機(jī)號(hào)碼、電話號(hào)碼校驗(yàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論