Hướng dẫn check if image is base64 javascript - kiểm tra xem hình ảnh có phải là javascript base64 không

Tôi đang sử dụng hàm

var base64regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;

base64regex.test("SomeStringObviouslyNotBase64Encoded...");             // FALSE
base64regex.test("U29tZVN0cmluZ09idmlvdXNseU5vdEJhc2U2NEVuY29kZWQ=");   // TRUE
2 để giải mã một chuỗi từ base64 sang chuỗi. Bây giờ tôi tự hỏi, có cách nào để kiểm tra xem 'Chuỗi' có thực sự là Base64 hợp lệ không? Tôi muốn được thông báo nếu chuỗi không phải là base64 để tôi có thể thực hiện một hành động khác.

Hướng dẫn check if image is base64 javascript - kiểm tra xem hình ảnh có phải là javascript base64 không

pimvdb

Phù bằng vàng 149K7676 gold badges301 silver badges351 bronze badges

Hỏi ngày 22 tháng 10 năm 2011 lúc 14:55Oct 22, 2011 at 14:55

1

Nếu bạn muốn kiểm tra xem nó có thể được giải mã hay không, bạn chỉ cần thử giải mã nó và xem liệu nó có thất bại hay không:

try {
    window.atob(str);
} catch(e) {
    // something failed

    // if you want to be specific and only catch the error which means
    // the base 64 was invalid, then check for 'e.code === 5'.
    // (because 'DOMException.INVALID_CHARACTER_ERR === 5')
}

Đã trả lời ngày 22 tháng 10 năm 2011 lúc 15:03Oct 22, 2011 at 15:03

PIMVDBPIMVDBpimvdb

Phù bằng vàng 149K7676 gold badges301 silver badges351 bronze badges

6

Hỏi ngày 22 tháng 10 năm 2011 lúc 14:55

var base64regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;

base64regex.test("SomeStringObviouslyNotBase64Encoded...");             // FALSE
base64regex.test("U29tZVN0cmluZ09idmlvdXNseU5vdEJhc2U2NEVuY29kZWQ=");   // TRUE

Nếu bạn muốn kiểm tra xem nó có thể được giải mã hay không, bạn chỉ cần thử giải mã nó và xem liệu nó có thất bại hay không:

  • Đã trả lời ngày 22 tháng 10 năm 2011 lúc 15:03
  • PIMVDBPIMVDB

Dựa trên câu trả lời của @Anders-Marzi-Tornblad, sử dụng Regex để thực hiện một bài kiểm tra đúng/sai đơn giản cho tính hợp lệ của Base64 cũng dễ như sau:Jan 25, 2016 at 20:58

Cập nhật 2021Philzen

Theo các bình luận bên dưới, nó sẽ truyền giải pháp dựa trên Regex này cung cấp kiểm tra chính xác hơn so với chỉ đơn giản là ____ 13

var base64regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;

base64regex.test("SomeStringObviouslyNotBase64Encoded...");             // FALSE
base64regex.test("U29tZVN0cmluZ09idmlvdXNseU5vdEJhc2U2NEVuY29kZWQ=");   // TRUE
4 vì cái sau không kiểm tra ____ 15 padding. Theo RFC4648 ________ 15 padding chỉ có thể bị bỏ qua đối với mã hóa cơ sở16 hoặc nếu độ dài dữ liệu được biết một cách ngầm.27 silver badges43 bronze badges

12

Giải pháp dựa trên Regex dường như cũng là giải pháp nhanh nhất được gợi ý bởi Kai. Vì JSPERF có vẻ như atm bong tróc, tôi đã thực hiện một bài kiểm tra mới trên JSBench, điều này xác nhận điều này.

function isBase64(str) {
    if (str ==='' || str.trim() ===''){ return false; }
    try {
        return btoa(atob(str)) == str;
    } catch (err) {
        return false;
    }
}

Đã trả lời ngày 25 tháng 1 năm 2016 lúc 20:58

Philzenphilzen4 gold badges40 silver badges58 bronze badges

3.64727 Huy hiệu bạc43 Huy hiệu đồngDec 3, 2015 at 14:24

Cái này cần phải dùng mẹo.Dan Smith

Andy Hoffman6 silver badges3 bronze badges

6

17,9K4 Huy hiệu vàng40 Huy hiệu bạc58 Huy hiệu đồng

Đã trả lời ngày 3 tháng 12 năm 2015 lúc 14:24

Dan Smithdan Smith

Hướng dẫn check if image is base64 javascript - kiểm tra xem hình ảnh có phải là javascript base64 không

j3ff

6156 Huy hiệu bạc3 Huy hiệu đồng7 gold badges40 silver badges51 bronze badges

Nếu "hợp lệ" có nghĩa là "chỉ có Base64 chars trong đó" thì hãy kiểm tra đối với

var base64regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;

base64regex.test("SomeStringObviouslyNotBase64Encoded...");             // FALSE
base64regex.test("U29tZVN0cmluZ09idmlvdXNseU5vdEJhc2U2NEVuY29kZWQ=");   // TRUE
7.Oct 22, 2011 at 14:58

Hướng dẫn check if image is base64 javascript - kiểm tra xem hình ảnh có phải là javascript base64 không

Nếu "hợp lệ" có nghĩa là một chuỗi được mã hóa cơ sở "hợp pháp" thì bạn nên kiểm tra

var base64regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;

base64regex.test("SomeStringObviouslyNotBase64Encoded...");             // FALSE
base64regex.test("U29tZVN0cmluZ09idmlvdXNseU5vdEJhc2U2NEVuY29kZWQ=");   // TRUE
5 ở cuối.Dave Newton

Nếu "hợp lệ" có nghĩa là một cái gì đó hợp lý sau khi giải mã thì nó đòi hỏi kiến ​​thức miền.24 gold badges254 silver badges301 bronze badges

5

5.3797 Huy hiệu vàng40 Huy hiệu bạc51 Huy hiệu Đồng

/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/

Explanation:

^                          # Start of input
([0-9a-zA-Z+/]{4})*        # Groups of 4 valid characters decode
                           # to 24 bits of data for each group
(                          # Either ending with:
    ([0-9a-zA-Z+/]{2}==)   # two valid characters followed by ==
    |                      # , or
    ([0-9a-zA-Z+/]{3}=)    # three valid characters followed by =
)?                         # , or nothing
$                          # End of input

Đã trả lời ngày 22 tháng 10 năm 2011 lúc 14:58Oct 24, 2011 at 10:20

3

Dave Newtondave Newton

if(btoa(atob(str))==str){
  //...
}

158K24 Huy hiệu vàng254 Huy hiệu bạc 301 Huy hiệu đồngOct 20, 2015 at 5:31

2

Tôi sẽ sử dụng một biểu thức chính quy cho điều đó. Thử cái này:

const notBase64 = /[^A-Z0-9+\/=]/i;

export default function isBase64(str) {
  assertString(str); // remove this line and make sure you pass in a string
  const len = str.length;
  if (!len || len % 4 !== 0 || notBase64.test(str)) {
    return false;
  }
  const firstPaddingChar = str.indexOf('=');
  return firstPaddingChar === -1 ||
    firstPaddingChar === len - 1 ||
    (firstPaddingChar === len - 2 && str[len - 1] === '=');
}

https://github.com/chriso/validator.js/blob/master/src/lib/isBase64.js

Đã trả lời ngày 24 tháng 10 năm 2011 lúc 10:20Apr 7, 2017 at 13:15

Phương pháp này cố gắng giải mã sau đó mã hóa và so sánh với bản gốc. Cũng có thể được kết hợp với các câu trả lời khác cho các môi trường gây ra lỗi phân tích cú pháp. Cũng có thể có một chuỗi trông giống như Base64 hợp lệ từ quan điểm regex nhưng không phải là cơ sở thực tế64.Lukas Liesis

Đã trả lời ngày 20 tháng 10 năm 2015 lúc 5:3110 gold badges107 silver badges105 bronze badges

4

Đây là cách nó được thực hiện trong một trong những lib xác thực yêu thích của tôi:

  1. Đã trả lời ngày 7 tháng 4 năm 2017 lúc 13:15
  2. Lukas liesislukas liesis
  3. 22.8K10 Huy hiệu vàng107 Huy hiệu bạc105 Huy hiệu Đồng

Đối với tôi, một chuỗi có thể là một cơ sở được mã hóa64 nếu:

function isBase64(str)
{
    return str.length % 4 == 0 && /^[A-Za-z0-9+/]+[=]{0,2}$/.test(str);
}

chiều dài của nó chia hết cho 4Nov 18, 2020 at 10:22

Hướng dẫn check if image is base64 javascript - kiểm tra xem hình ảnh có phải là javascript base64 không

Sử dụng

var base64regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;

base64regex.test("SomeStringObviouslyNotBase64Encoded...");             // FALSE
base64regex.test("U29tZVN0cmluZ09idmlvdXNseU5vdEJhc2U2NEVuY29kZWQ=");   // TRUE
9
function isBase64(str) {
    if (str ==='' || str.trim() ===''){ return false; }
    try {
        return btoa(atob(str)) == str;
    } catch (err) {
        return false;
    }
}
0
function isBase64(str) {
    if (str ==='' || str.trim() ===''){ return false; }
    try {
        return btoa(atob(str)) == str;
    } catch (err) {
        return false;
    }
}
1
function isBase64(str) {
    if (str ==='' || str.trim() ===''){ return false; }
    try {
        return btoa(atob(str)) == str;
    } catch (err) {
        return false;
    }
}
2willnode

Chỉ sử dụng

var base64regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;

base64regex.test("SomeStringObviouslyNotBase64Encoded...");             // FALSE
base64regex.test("U29tZVN0cmluZ09idmlvdXNseU5vdEJhc2U2NEVuY29kZWQ=");   // TRUE
5 cuối cùng (0-2 ký tự)12 silver badges17 bronze badges

3

Vì vậy, mã sẽ là


    const validateBase64 = function(encoded1) {
        var decoded1 = Buffer.from(encoded1, 'base64').toString('utf8');
        var encoded2 = Buffer.from(decoded1, 'binary').toString('base64');
        return encoded1 == encoded2;
    }

Đã trả lời ngày 18 tháng 11 năm 2020 lúc 10:22Jul 7, 2021 at 12:58

willnodewillnodemikep

1.21812 Huy hiệu bạc17 Huy hiệu đồng1 gold badge24 silver badges35 bronze badges

Triển khai trong nodejs (xác nhận không chỉ cho phép chars mà chuỗi base64)

var base64regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;
base64regex.test(value)

Đã trả lời ngày 7 tháng 7 năm 2021 lúc 12:58

Mikepmikep

var base64regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;

base64regex.test("SomeStringObviouslyNotBase64Encoded...");             // FALSE
base64regex.test("U29tZVN0cmluZ09idmlvdXNseU5vdEJhc2U2NEVuY29kZWQ=");   // TRUE
0

4.9831 Huy hiệu vàng24 Huy hiệu bạc35 Huy hiệu đồngJul 7 at 18:34

Hướng dẫn check if image is base64 javascript - kiểm tra xem hình ảnh có phải là javascript base64 không

Tôi đã thử các câu trả lời dưới đây nhưng có một số vấn đề.

var base64regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;

base64regex.test("SomeStringObviouslyNotBase64Encoded...");             // FALSE
base64regex.test("U29tZVN0cmluZ09idmlvdXNseU5vdEJhc2U2NEVuY29kZWQ=");   // TRUE
1

Khi sử dụng điều này, nó sẽ đúng với các chữ cái "BBBBB". Và nó cũng sẽ đúng với "4444".Dec 17, 2020 at 12:18

Hướng dẫn check if image is base64 javascript - kiểm tra xem hình ảnh có phải là javascript base64 không

Tôi đã thêm một số mã để làm việc chính xác cho tôi.Arsman Ahmad

Đã trả lời ngày 7 tháng 7 lúc 18:3423 silver badges34 bronze badges

5