首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

ASP 正則表達式遮罩密碼:只保留首尾字元,中間以 * 替代

     編輯:程式設計疑難解答

需求:test13@#esli → t**********i (首尾各 1 字元,其餘替換為 *)。用字串操作比正則更簡單高效。

VBScript 函數實作

Function MaskPassword(pwd)
    If Len(pwd) <= 2 Then
        MaskPassword = pwd ' 太短不遮罩或自行決定
        Exit Function
    End If
    Dim first, last, midLen, masked
    first = Left(pwd, 1)
    last  = Right(pwd, 1)
    midLen = Len(pwd) - 2
    masked = first & String(midLen, "*") & last
    MaskPassword = masked
End Function

' 測試
MsgBox MaskPassword("test13@#esli") ' 輸出 t**********i

正則替代方案 (若堅持用 RegExp)

Function MaskPasswordReg(pwd)
    Dim re
    Set re = New RegExp
    re.Global = True
    re.Pattern = "(?<=.).(?=.)" ' 非首非尾的任意字元 (需支援 lookaround)
    ' VBScript RegExp 不支援 lookbehind,改用替換邏輯:
    ' 實際上 VBScript 正則功能弱,不建議用於此場景
    MaskPasswordReg = pwd
End Function

注意: VBScript (ASP 經典) 的 RegExp 物件**不支援**前瞻/後顧斷言 ((?=), (?<=)),故無法用單一正則完成「保留首尾」替換。字串函數 Left/Right/String 是原生、高效、相容的選擇。

ASP.NET (C#) 版本

public static string MaskPassword(string pwd) {
    if (string.IsNullOrEmpty(pwd) || pwd.Length <= 2) return pwd;
    return pwd[0] + new string('*', pwd.Length - 2) + pwd[pwd.Length - 1];
}

安全補充

  • 前端顯示遮罩僅為 UI 體驗,**傳輸與儲存必須加密** (TLS + bcrypt/Argon2)。
  • 避免在日誌、URL、ViewState 中出現明文密碼。
  • 若需在郵件/簡訊發送臨時密碼,使用一次性 Token 而非真實密碼。

用最簡單的字串操作解決遮罩需求,將精力集中在真正的安全防護上。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved