Tôi đã tìm cách để xác nhận chuỗi base64 và bắt gặp điều này.Chuỗi xác thực là định dạng base64 sử dụng RegEx?
^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$
Tôi cần một chút trợ giúp để cho phép "==" cũng như "=".
Cảm ơn
Tôi đã tìm cách để xác nhận chuỗi base64 và bắt gặp điều này.Chuỗi xác thực là định dạng base64 sử dụng RegEx?
^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$
Tôi cần một chút trợ giúp để cho phép "==" cũng như "=".
Cảm ơn
Điều này sẽ hoạt động rất tốt.
private static readonly HashSet<char> _base64Characters = new HashSet<char>() {
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/',
'='
};
public static bool IsBase64String(string value)
{
if (string.IsNullOrEmpty(value))
{
return false;
}
else if (value.Any(c => !_base64Characters.Contains(c)))
{
return false;
}
try
{
Convert.FromBase64String(value);
return true;
}
catch (FormatException)
{
return false;
}
}
Tôi đã cập nhật mã trên một chút để đáp ứng vài yêu cầu hơn:
HashSet<T>
nên được triển khai hoặc sử dụng Dictionary<T, U>
)Mã này là một phần của thư viện khẳng định của tôi, vì vậy đây là lý do tại sao có hai phương pháp kiểm tra và param tham số ...
private const char Base64Padding = '=';
private static readonly HashSet<char> Base64Characters = new HashSet<char>()
{
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'
};
public static void CheckBase64String(string param, string paramName)
{
if (CheckBase64StringSafe(param) == false)
{
throw (new ArgumentException(String.Format("Parameter '{0}' is not a valid Base64 string.", paramName)));
}
}
public static bool CheckBase64StringSafe(string param)
{
if (param == null)
{
// null string is not Base64 something
return false;
}
// replace optional CR and LF characters
param = param.Replace("\r", String.Empty).Replace("\n", String.Empty);
if (param.Length == 0 ||
(param.Length % 4) != 0)
{
// Base64 string should not be empty
// Base64 string length should be multiple of 4
return false;
}
// replace pad chacters
int lengthNoPadding = param.Length;
int lengthPadding;
param = param.TrimEnd(Base64Padding);
lengthPadding = param.Length;
if ((lengthNoPadding - lengthPadding) > 2)
{
// there should be no more than 2 pad characters
return false;
}
foreach (char c in param)
{
if (Base64Characters.Contains(c) == false)
{
// string contains non-Base64 character
return false;
}
}
// nothing invalid found
return true;
}
tôi đã không kiểm tra mã rộng rãi, vì vậy không có chức năng đảm bảo nào cả!
Ý của bạn là gì? '==' và '=' đã được cho phép. – kennytm
Có quyền của bạn hoạt động. Xin lỗi, tôi chỉ cần thêm một chuỗi "=" vào chuỗi được mã hóa của mình để kiểm tra khi tôi cần tạo một chuỗi mã hóa mới có chứa "==" :) – arbme
lưu ý rằng dấu cộng cần phải được thoát. như thế này: '^ (?: [A-Za-z0-9 \ + /] {4}) * (?: [A-Za-z0-9 \ + /] {2} == | [A-Za -z0-9 \ + /] {3} =)? $ ' –