Efficient regex for Canadian postal code function

前端 未结 7 1424
说谎
说谎 2020-12-24 01:57
var regex = /[A-Za-z]\\d[A-Za-z] ?\\d[A-Za-z]\\d/;
var match = regex.exec(value);
if (match){
    if ( (value.indexOf(\"-\") !== -1 || value.indexOf(\" \") !== -1 )          


        
7条回答
  •  北海茫月
    2020-12-24 02:17

    This one handles us and ca codes.

    function postalFilter (postalCode) {
    
        if (! postalCode) {
            return null;
        }
    
        postalCode = postalCode.toString().trim();
    
        var us = new RegExp("^\\d{5}(-{0,1}\\d{4})?$");
        var ca = new RegExp(/([ABCEGHJKLMNPRSTVXY]\d)([ABCEGHJKLMNPRSTVWXYZ]\d){2}/i);
    
        if (us.test(postalCode.toString())) {
            return postalCode;
        }
    
        if (ca.test(postalCode.toString().replace(/\W+/g, ''))) {
            return postalCode;
        }
        return null;
    }
    
    // these 5 return null
    console.log(postalFilter('1a1 a1a'));
    console.log(postalFilter('F1A AiA'));
    console.log(postalFilter('A12345-6789'));
    console.log(postalFilter('W1a1a1')); // no "w"
    console.log(postalFilter('Z1a1a1')); // ... or "z" allowed in first position!
    
    // these return canada postal less space
    console.log(postalFilter('a1a 1a1'));
    console.log(postalFilter('H0H 0H0'));
    
    // these return unaltered
    console.log(postalFilter('H0H0H0'));
    console.log(postalFilter('a1a1a1'));
    console.log(postalFilter('12345'));
    console.log(postalFilter('12345-6789'));
    console.log(postalFilter('123456789'));
    
    // strip spaces
    console.log(postalFilter(' 12345 '));
    

提交回复
热议问题