比較實用(高大上)的正則表達式

匹配特殊字符集

[\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]+

必須且只能是字母+數字的組合

長度6~25位
/^(?![a-zA-Z]+$)(?![0-9]+$)[a-zA-Z0-9]{6,25}$/

必須含有字母+數字的組合(還可以來些特殊字符)

長度6~25位
/^(?![a-zA-Z]+$)(?![0-9]+$)[a-zA-Z0-9\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]{6,25}$/

必須含有字母+數字+特殊字符的組合

長度6~25位
/^(?![a-zA-Z0-9]+$)(?![a-zA-Z\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]+$)(?![0-9\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]+$)[a-zA-Z0-9\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]{6,25}$/

正則語義解釋

(?![a-zA-Z]+$) 從當前位置到結尾不能是純字母
(?![0-9]+$)  從當前位置到結尾不能是純數字
(?![\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]+$) 從當前位置到結尾不能是純特殊字符

(?![a-zA-Z0-9]+$) 從當前位置到結尾不能只有字母和數字
(?![a-zA-Z\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]+$) 從當前位置到結尾不能只有字母和特殊字符
(?![0-9\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]+$) 從當前位置到結尾不能只有數字和特殊字符

[\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E] 鍵盤上的特殊字符集

代碼實例

用 php 實例演示下,可以用來做密碼複雜度的驗證,比如必須得是數字+字母的組合,必須得有特殊字符等要求。

<?php
// 必須是字母 數字的組合 不能有特殊字符
$pattern_must_char_num = '/^(?![a-zA-Z]+$)(?![0-9]+$)[a-zA-Z0-9]{6,25}$/';
// 不能是純數字或純字母 可以有特殊字符
$pattern_should_char_num = '/^(?![a-zA-Z]+$)(?![0-9]+$)[a-zA-Z0-9\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]{6,25}$/';
// 必須是字母 數字 特殊字符的組合
$pattern_must_char_num_spechar = '/^(?![a-zA-Z0-9]+$)(?![a-zA-Z\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]+$)(?![0-9\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]+$)[a-zA-Z0-9\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]{6,25}$/';

$pure_num = '123456';
$pure_char = 'asdqwe';
$char_num = 'asd123';
$char_num_spechar = '123@asd';

/**
 * 校驗數據是否達到 pattern 的級別
 * @param  [type] $standard_pattern [description]
 * @param  [type] $subject          [description]
 * @return [type]                   [description]
 */
function complexityCheck(string $standard_pattern, string $subject): bool
{
    // 匹配次數 > 0 則符合 pattern
    return preg_match($standard_pattern, $subject) > 0;
}

var_dump(complexityCheck($pattern_must_char_num, $pure_num));
var_dump(complexityCheck($pattern_must_char_num, $pure_char));
var_dump(complexityCheck($pattern_must_char_num, $char_num));
var_dump(complexityCheck($pattern_must_char_num, $char_num_spechar));
echo str_repeat("=", 20) . PHP_EOL;

var_dump(complexityCheck($pattern_should_char_num, $pure_num));
var_dump(complexityCheck($pattern_should_char_num, $pure_char));
var_dump(complexityCheck($pattern_should_char_num, $char_num));
var_dump(complexityCheck($pattern_should_char_num, $char_num_spechar));
echo str_repeat("=", 20) . PHP_EOL;

var_dump(complexityCheck($pattern_must_char_num_spechar, $pure_num));
var_dump(complexityCheck($pattern_must_char_num_spechar, $pure_char));
var_dump(complexityCheck($pattern_must_char_num_spechar, $char_num));
var_dump(complexityCheck($pattern_must_char_num_spechar, $char_num_spechar));

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章