赶在标准化前构造一个RegExp.escape方法

使用RegExp.exec代替RegExp.$来非标准化格式化日期(前端) 通常情况下,我们可以使用正则表达式来提取日期中的各个部分,并根据需要进行格式化。已经不被推荐,因为它是一个全局属性,可能会导致意外的结果。相反,我们可以使用RegExp.exec方法来实现相同的功能,并且更加安全可靠。属性,我们可以更加安全和可靠地提取日期字符串中的各个部分,并进行格式化操作。最后,我们将日期部分按照需要的格式进行拼接,并返回格式化后的日期字符串。如果匹配失败,我们返回一个空字符串。的函数,它接收一个日期字符串作为参数。来匹配日期字符串中的年、月和日。如果存在,说明匹配成功,我们可以通过。 阅读详情

JavaScript没有RegExp.escape方法, 但是一些其他语言有比如ruby.

escape是非常有用的一个方法, 比如在设计搜索算法的时候, 我们需要将用户传来的string作为普通字符串封装在一个RegExp对象里. 如果我们直接这样封装: new RegExp(`${user.name} is stupid`,'g'), 那用户输入的特殊字符会被解析为正则表达式的通配符.

所以为了解决这个问题, 我们需要一个escape方法, 输入一个比如"abc.*"返回"abc\.\*", 即把所有特殊字符都逃逸掉.

很遗憾JS的标准库里没有这个方法, 于是乎我决定polyfill一下标准库:

RegExp.escape = string => string.replace(/[.*+?^${}()|[\]\\]/g, match => `\\${match}`);

我们利用强大的replace方法, 匹配到所有的正则特殊字符, 然后根据匹配值拼接出转义的串(就是在之前加一个'\').

除了要注意这里面的几层转义外, 我还想说的是, 在这个简单的问题背后反映了一个优秀开发者解决问题的思路:

  1. 首先我们就收用户串的时候就要考虑到安全性, 而不是等到出了bug再寻找问题.
  2. 然后当意识到escape是最好的方法时, 不是一股脑去构造函数, 而应该先在标准库里仔细找找相关的工具(程序员3大错觉之一就是相信自己超越了标准库)
  3. 最后寻找solution时该如何Google?为什么我能一下子想到搜索关键词"RegExp.escape", 而不是'过滤用户','prototype'什么的, 因为与类有关和而与对象本身无关的方法都直接挂在构造函数上面, 而'escape'正是描述这种转义的通用词语, 所以我才能在最快的时间内找到最好的解决方案.

最后, 还是希望JS标准库越来越丰富, Web平台越来越完美吧.

regexp-escape:在正则表达式中使用的转义字符串 正则表达式转义 RegExp.escape返回一个带有转义正则表达式字符的字符串,以便在正则表达式中使用。 用法 var strName = 'Dr. Doogie Howser, M.D.' ; var escName = RegExp . escape ( strName ) ; // Dr\. Doogie Howser, M\.D\. var regName = new RegExp ( '\\b' + escName + '\\b' ) ; // /\bDr\. Doogie Howser, M\.D\.\b/ 浏览器兼容性 支持所有现代浏览器,包括: Chrome合金 IE浏览器 火狐 歌剧 苹果浏览器 安卓 2.2+ 黑莓 7+ iOS Safari 4+ 填充状态 如果您想在 JavaScript 标准中看到RegExp.escape ,请订阅并请求将其添加到 [E 立即下载

相关推荐

escape-string-regexp:Escape RegExp特殊字符

转义字符串正则表达式 Escape RegExp特殊字符 安装 $ npm install escape-string-regexp 用法 import escapeStringRegexp from 'escape-string-regexp' ; const escapedString = escapeStringRegexp ( 'How much $ for a :unicorn:?' ) ; //=> 'How much \\$ for a :unicorn:\\?' new RegExp ( escapedString ) ; 您还可以使用它来转义插入正则表达式中间(例如,字符类)的字符串。 Tidelift帮助维护人员实现开源的可持续性,同时又为公司有关其依赖项的安全性,维护和许可的保证。

c#正则替换之Regex.Escape

做码农好久,从来没有写过博客,今天心血来潮上来开个头,随便记点工作中遇到的问题,权当备忘吧~        工作中经常会用到正则替换,比如说文章关键字的检索,根据关键字检索出文章列表,文章中的关键字我们希望高亮显示,这时候就会用到正则替换,因为C#的String.Replace是不支持忽略大小写的,当然有的人会说正则替换的效率问题,这里就不做深究了,毕竟我们一般的操作正则的效率还不影响的,下面的

DH163的博客 4160

用MATLAB从零实现六足机器人步态仿真:交替三角与波动步态保姆级教程

本文详细介绍了如何使用MATLAB从零实现六足机器人的两种经典步态仿真:交替三角支撑步态和波动步态。通过参数定义、相位设置、运动轨迹生成和三维可视化等步骤,帮助读者掌握六足机器人步态规划的核心技术。教程包含完整代码和详细解析,适合机器人爱好者和相关专业学生学习实践。

weixin_26765363的博客 230

C# 正则表达式 通配符 使用Regex.Escape一些问题

正则表达式使用Regex.Escape一些问题 我现在做一个C#,正则表达式的处理,支持通配符。 参数为用户输入的正则表达式可能包含通配符。 用户输入正则表达后,调用上面函数进行转换。 C#代码详细如下: string StrPattern = WildcardToRegex(“X[0-3]”); bool ret = Regex.IsMatch(input, StrPattern, RegexO...

weixin_45046566的博客 1939

Mac安装Weblogic教程

1.Weblogic的下载 这次安装的是最新版本12 官网下载地址: http://www.oracle.com/technetwork/middleware/weblogic/downloads/index.html 下载需要登录账号,如没有账号要注册一个 下载后的文件如下图,其中fmw_12.2.1.3.0_wls_quick.jar文件就是安装包了,注意现在不要对它进行解压 2.安装前的确...

weixin_40102675的博客 5063

XGBoost与Embedding混合建模实战解析

在机器学习领域,特征工程与模型融合是提升预测性能的关键技术。Embedding技术通过将高维稀疏特征(如文本、ID类数据)转化为低维稠密向量,有效捕获语义关联;而XGBoost作为强大的集成学习算法,擅长处理结构化特征并进行自动特征组合。两者结合的混合架构(如Semantic Boosted Trees)在金融风控和推荐系统等场景中展现出显著优势,尤其在处理用户行为序列、商品ID等复杂特征时,相比传统方法能获得更好的模型效果。本文通过电商推荐和金融反欺诈等案例,详解如何实现Embedding+XGBoost

weixin_28718641的博客 326

JavaScript-基本引用类型(正则表达式:RegExp)

文章目录一、正则表达式概述1.1 什么是正则表达式1.2 正则表达式的特点二、正则表达式的创建2.1 利用字面量创建正则表达式2.2 通过构造函数来创建正则表达式三、RegExp 实例属性(实际开发使用不多)四、RegExp 实例方法4.1 exec()4.2 test()4.3 继承的方法五、正则表达式中的特殊字符5.1 边界符5.2 字符类5.2.1 方括号( [ ] )5.2.2 量词符5.2.3 括号总结5.3 预定义类六、正则替换( replace ) ECMAScript 通过 RegExp

每天进步一点点 1509

Java Web 图书管理系统的制作指南

实现对图书信息的增删改查(CRUD)操作。支持用户登录与权限管理。图书借阅与归还功能。系统管理员可以管理用户信息和图书库存。

Xiaoxin的博客 1629

如何替换 JavaScript 中所有出现的字符串

我的 JavaScript 代码中有这个字符串:正在做:似乎只删除了上面字符串中第一次出现的 abc。我怎样才能替换它的所有出现?

HuntsBot的博客 989

图像去雾新思路:手把手教你复现DEA-Net中的“细节增强卷积”与PyTorch实现

本文详细解析了DEA-Net中的'细节增强卷积'(DEConv)与PyTorch实现,通过多分支差分卷积和重参数化技术,显著提升单图像去雾效果。文章从数学原理到代码实现,手把手指导复现这一创新架构,帮助开发者在保持轻量化的同时实现41dB以上的PSNR指标,适用于自动驾驶、遥感监测等关键领域。

weixin_30323631的博客 506

电子结构设计(EMD)十年知识总结

客官,你的面相是做结构设计的奇才~1. 材料选择【一出手的0.1s就败了】2. 钣金件设计【折来折去有啥难】3. 塑胶件设计【看着好复杂】4. 型材件设计【凭啥不让我设计】5. 电子结构(PCBA)设计【静电肿么要我背锅】6. 包装设计【要的就是金玉其外,败絮其中】7. 外观(工业)设计【好不好看,谁说了算】8. 标签设计【】9. 标准件选择【一个螺丝难倒英雄汉/提起螺丝,英雄气短】10. 计算仿...

wfeng86的博客 1571

RegExp()方法参数含义和使用方法

RegExp()方法: 参数 参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。 参数 attributes 是一个可选的字符串,包含属性 "g"、"i" 和 "m","g"用于指定全局匹配,"i"用于区分大小写的匹配,"m"用于多行匹配。ECMAScript 标准化之前,不支持 m 属性。如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。 返回值 一个新的 RegExp 对象,具有指定的模式和标志。如果参数 pattern 是正则表达式而不是字符串,那么 Reg

NXBBC的博客 8030

1.1 了解Spring框架 -《SSM深入解析与项目实战》

文章目录第1篇 基础概念第1章 谈谈SSM框架和Redis1.1 了解Spring框架1.1.1 如何学习Spring1.1.2 IoC(Inversion of Control 控制反转)1.1.3 AOP(Aspect Oriented Programing面向切面编程) 项目中所有的源码都可以在此链接的仓库中找到:https://github.com/chenhaoxiang/uifuture-ssm 本章非常形象的介绍了Springn中最核心的两个概念,IoC和AOP,使用了现实中的例子

谙忆-陈浩翔 2136

JsvsScript RegExp对象

是一个可选的字符串,包含属性 “g”、“i” 和 “m”,分别用于指定全局匹配、区分大小写的匹配和多行匹配。是正则表达式而不是字符串,那么 RegExp() 构造函数将用与指定的 RegExp 相同的模式和标志创建一个新的 RegExp 对象。如果不用 new 运算符,而将 RegExp() 作为函数调用,那么它的行为与用 new 运算符调用时一样,只是当。一个新的 RegExp 对象,具有指定的模式和标志。是正则表达式,而不是字符串,则必须省略该参数。,而不再创建一个新的 RegExp 对象。

l_ayyy的博客 881

分享一份小度在家1C系列NV2101刷机保姆级教程,轻松解锁第三方应用!(内含详细教程、刷机工具和救砖等工具)

分享一份小度在家1C系列NV2101刷机保姆级教程,轻松解锁第三方应用!(内含详细教程、刷机工具和救砖等工具)

XiaoqiangClub的博客 7194

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

JavaScript中的RegExp(正则)对象

RegExp是正则表达式(regular expression)的简写,正则表达式是表达文本结构的一种方法。 正则表达式对前端来说很重要,常见的应用场景为`验证`、`替换`、`提取`。最典型的应用场景是在页面中对用户的输入进行验证,涉及到系统安全和用户体验,这些非常重要。

dreamingbaobei的博客 545

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

JavaScript对象——RegExp

JavaScript对象——RegExp

学习中 159

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

095_RegExp对象

1. RegExp对象 1.1. RegExp对象表示正则表达式, 它是对字符串执行模式匹配的强大工具。 1.2. 字面量语法 /pattern/attributes; 1.3. 创建RegExp对象的语法: new RegExp(pattern, attributes); 1.4. 参数 1.4.1. 参数pattern是一个字符串, 指定了正则表达式的模式或其他正则表达式。 1.4.2. 参数attributes是一个可选的字符串, 包含属性"g"、"i"和"m", 分别用于指定全局

aihiao的专栏 238

JavaScript RegExp 对象

创建 RegExp 对象的语法: 直接量语法 /pattern/attributes 创建 RegExp 对象的语法: var obj=new RegExp(pattern,attributes); 事例1: var pattern=/a/; document.write(pattern.exec("asdas")); 事例2: ...

108

js内置对象RegExp及RegExp的方法

1、RegExp 对象: /pattern/attributes,表示正则表达式,它是对字符串执行模式匹配的强大工具。 创建方法: 1、new RegExp(pattern, attributes);(不推荐)需要转义。 2、/pattern/attributes对象字面量。效率更高。 参数: 参数pattern是一个字符串,指定了正则表达式的模式或其他正则表达式。 参数...

weixin_34233421的博客 144

JavaScript RegExp 对象参考手册

JavaScript RegExp 对象参考手册 RegExp 对象 RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具。 直接量语法 /pattern/attributes 创建 RegExp 对象的语法: new RegExp(pattern, attributes); 参数 参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。

咖啡 768

正则RegEXp

JavaScript RegExp 对象 RegExp 对象 RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具。 直接量语法 /pattern/attributes 创建 RegExp 对象的语法: new RegExp(pattern, attributes); 参数 参数pattern是一个字符串,指定了正则表达式的模式或...

ICSD21333的博客 172

JavaScript 定义正则表达式的两种形式:RegExp(),正则表达式直接量

每当请教别人正则表达式的一些问题时,总会脸红,没办法,咱这脑袋实在记不住这些玩意。只有“坐观垂钓者,徒有羡鱼情”的份。 今天呢就来简单介绍一下在 JavaScript 中定义正则表达式的两种形式,首先声明的是,正则表达式是一门高深的学问,我只能略微的给大家介绍一下,因为我也是个半吊子。 JavaScript 中的正则表达式 :先来简单介绍一下JavaScript中的正则表达式。

goingdownba的专栏 1691

RegExp是什么

RegExp是JavaScript语言中的内置对象,$1是这个内置对象的一个属性。 在MDN中这样介绍: 属性的值是只读的而且只有在正确匹配的情况下才会改变.括号匹配项是无限的, 但是——RegExp对象能捕获的只有九个. 也就是 RegExp.$1 RegExp.$2 RegExp.$3 … RegExp.$9 到底是什么意思呢?从代码中看: var reg = /(\d...

程序员老李|前阿里技术专家,10 年前端。 做免费办公工具:图片压缩、PDF、Markdown、在线简历,全在浏览器本地处理。 文件不上传,不用注册。技术栈 Canvas、WebAssembly、Web Worker。 2176
上一篇: 数学的深渊 (搞笑)
下一篇: JSON Schema了解一下?
xosg
xosg 领域专家: 网络协议与安全技术领域 领域专家: 网络协议与安全技术领域
博客等级 码龄9年 1986粉丝 864原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xosg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值