常用正则验证以及金额相关处理

1 篇文章 0 订阅
/**
 * 公共验证类
 */
var commonChexk = {


/**
* 非空
* @param obj 对象
* @param pmsg 提示的信息
* @returns checkResult 验证结果true false
*/
jznotnullCheck: function(obj, pmsg) {
var objval = $(obj).val();
if(objval != ""){
objval = commonChexk.jzFilteredJS(objval);
$(obj).val(objval);
}
var checkResult = true;
var msg = "数据不能为空,请输入!";
if(commonChexk.jzisEmpty(objval)) {
checkResult = false;
if(!commonChexk.jzisEmpty(pmsg)) {
msg = pmsg;
}
comErrorTip.cssTip(obj, msg);
} else {
comErrorTip.resetTilBorCss(obj);
}
return checkResult;
},


/**
* 整数(正,负,0)
* @param obj 对象
* @param len 最大位数
* @param pmsg 提示信息
* @param cannull cannull(能为空 验证通过)  cannotnull(不能为空 验证不通过)
* @returns checkResult 验证结果true false
*/
jznumberCheck: function(obj, len, pmsg, cannull) {
var check = /^-?\d+$/gi;
var msg = "只能输入整数";


if(!commonChexk.jzisEmpty(len)) { //指定位数
check = new RegExp("^-?\\d{1," + len + "}$", "gi");
msg += ",且在" + len + "位之内";
}
//验证主体
var checkResult = checkMainJudge(obj,check,cannull,msg,pmsg);
return checkResult;
},


/**
* 负整数
* @param obj 对象
* @param len 最大位数
* @param pmsg 提示信息
* @param cannull cannull(能为空 验证通过)  cannotnull(不能为空 验证不通过)
* @returns checkResult 验证结果true false
*/
jznumberlosCheck: function(obj, len, pmsg, cannull) {
var check = /^-\d+$/gi;
var msg = "只能输入负整数";


if(!commonChexk.jzisEmpty(len)) { //指定位数
check = new RegExp("^-\\d{1," + len + "}$", "gi");
msg += ",且在" + len + "位之内";
}
//验证主体
var checkResult = checkMainJudge(obj,check,cannull,msg,pmsg);
return checkResult;
},


/**
* 正整数
* @param obj 对象
* @param len 最大位数
* @param pmsg 提示信息
* @returns checkResult 验证结果true false
*/
jznumberjustCheck: function(obj, len, pmsg, cannull) {
var check = /^\d+$/gi;
var msg = "只能输入正整数";


if(!commonChexk.jzisEmpty(len)) { //指定位数
check = new RegExp("^\\d{1," + len + "}$", "gi");
msg += ",且在" + len + "位之内";
}
//验证主体
var checkResult = checkMainJudge(obj,check,cannull,msg,pmsg);
return checkResult;
},


/**
* 小数
* @param obj 对象
* @param len 保留位数
* @param pmsg 提示信息
* @param cannull cannull(能为空 验证通过)  cannotnull(不能为空 验证不通过)
* @returns checkResult 验证结果true false
*/
jzdoubleCheck: function(obj, len, pmsg, cannull) {
var check = /^(-?)([1-9]\d*|0)(\.\d+)$/gi;
var msg = "请输入小数";


if(!commonChexk.jzisEmpty(len)) { //保留位数
check = new RegExp("^(-?)([1-9]\\d*|0)(\.\\d{" + len + "})$", "gi");
msg += ",且请保留" + len + "位小数";
}
//验证主体
var checkResult = checkMainJudge(obj,check,cannull,msg,pmsg);
return checkResult;
},


/**
* 正小数
* @param obj 对象
* @param len 保留位数
* @param pmsg 提示信息
* @param cannull cannull(能为空 验证通过)  cannotnull(不能为空 验证不通过)
* @returns checkResult 验证结果true false
*/
jzdoublejustCheck: function(obj, len, pmsg, cannull) {
var check = /^([1-9]\d*|0)(\.\d+)$/gi;
var msg = "请输入正小数";
if(!commonChexk.jzisEmpty(len)) { //保留位数
check = new RegExp("^([1-9]\\d*|0)(\.\\d{" + len + "})$", "gi");
msg += ",且保留" + len + "位小数";
}
//验证主体
var checkResult = checkMainJudge(obj,check,cannull,msg,pmsg);
return checkResult;
},


/**
* 负小数
* @param obj 对象
* @param len 保留位数
* @param pmsg 提示信息
* @param cannull cannull(能为空 验证通过)  cannotnull(不能为空 验证不通过)
* @returns checkResult 验证结果true false
*/
jzdoublefuCheck: function(obj, len, pmsg, cannull) {
var check = /^(-)([1-9]\d*|0)(\.\d+)$/gi;
var msg = "请输入负小数";
if(!commonChexk.jzisEmpty(len)) { //保留位数
check = new RegExp("^(-)([1-9]\\d*|0)(\.\\d{" + len + "})$", "gi");
msg += ",且保留" + len + "位小数";
}
//验证主体
var checkResult = checkMainJudge(obj,check,cannull,msg,pmsg);
return checkResult;
},


/**
* 联系电话
* @param obj 对象
* @param pmsg 提示信息
* @param cannull cannull(能为空 验证通过)  cannotnull(不能为空 验证不通过)
* @returns checkResult 验证结果true false
*/
jzcontactCheck: function(obj, pmsg, cannull) {
var msg = "请填写联系方式,手机号码或家庭固定电话";
var check = /^((0\d{2}-\d{8})|(0\d{3}-\d{7,8})|(1[3578]\d{9})|(\d{8}))$/;
//验证主体
var checkResult = checkMainJudge(obj,check,cannull,msg,pmsg);
return checkResult;
},


/**
* 身份证
* @param obj 对象
* @param pmsg
* @param cannull cannull(能为空 验证通过)  cannotnull(不能为空 验证不通过)
* @returns checkResult 验证结果true false
*/
jzcardCheck: function(obj, pmsg, cannull) {
var msg = "请输入15位或18位身份证号码";
var check = /^(^\d{15}$)|(^\d{17}([0-9]|X)$)$/g;
//验证主体
var checkResult = checkMainJudge(obj,check,cannull,msg,pmsg);
return checkResult;
},


/**
* 邮箱
* @param obj 对象
* @param pmsg 提示信息
* @param cannull cannull(能为空 验证通过)  cannotnull(不能为空 验证不通过)
* @returns checkResult 验证结果true false
*/
jzemailCheck: function(obj, pmsg, cannull) {
var check = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/g;
var msg = "请输入正确格式的邮箱";
//验证主体
var checkResult = checkMainJudge(obj,check,cannull,msg,pmsg);
return checkResult;
},


/**
* 中文
* @param obj 对象
* @param minNum 至少多少个中文
* @param maxNum 最多多少个中文
* @param pmsg 提示信息
* @param cannull cannull(能为空 验证通过)  cannotnull(不能为空 验证不通过)
* @returns checkResult 验证结果true false
*/
jzchinaCheck: function(obj, minNum, maxNum, pmsg, cannull) {
var check = /^[\u4e00-\u9fa5]*$/g;
var msg = "只能输入中文";


if(commonChexk.jzisEmpty(minNum)) {
check = /^[\u4e00-\u9fa5]*$/;
}
if(commonChexk.jzisEmpty(maxNum)) {
if(!commonChexk.jzisEmpty(minNum)) {
check = new RegExp("^[\u4e00-\u9fa5]{" + minNum + ",}$", "gi");
msg += ",且最少" + minNum + "位";
}
}
if(!commonChexk.jzisEmpty(minNum) && !commonChexk.jzisEmpty(maxNum)) {
check = new RegExp("^[\u4e00-\u9fa5]{" + minNum + "," + maxNum + "}$", "gi");
msg += ",且在" + minNum + "到" + maxNum + "位之间";
}
//验证主体
var checkResult = checkMainJudge(obj,check,cannull,msg,pmsg);
return checkResult;
},


/**
* 验证字符串,不能包含除数字,字母,下划线和.以外的字符
* @param obj 对象
* @param pmsg 提示信息
* @param cannull cannull(能为空 验证通过)  cannotnull(不能为空 验证不通过)
* @returns checkResult 验证结果true false
*/
jzstringCheck: function(obj, pmsg, cannull) {
var check = /^[0-9a-zA-Z_.]+$/g;
var msg = "不能包含除数字,字母,下划线及 . 以外的特殊符号及汉字";
//验证主体
var checkResult = checkMainJudge(obj,check,cannull,msg,pmsg);
return checkResult;
},


/**
* 验证普通文本 汉字,数字,字母 空格
* @param obj 对象
* @param len 最大长度
* @param pmsg 提示信息
* @param str 自定义可输入字符
* @returns checkResult 验证结果true false
*/
jzcomText: function(obj, len, pmsg, str) {
var objval = $(obj).val();
var checkResult = true;
var check = /^[\u4e00-\u9fa50-9a-zA-Z\s]*$/g;
var msg = "不能包含除汉字,数字,字母以外的特殊符号";


if(!commonChexk.jzisEmpty(objval)) {
if(!commonChexk.jzisEmpty(str)) {
check = new RegExp("^[\u4e00-\u9fa50-9a-zA-Z\\s" + str + "]*$", "gi");
msg = "不能包含除汉字,数字,字母" + str + "以外的特殊符号";
}
if(!commonChexk.jzisEmpty(len)) { //指定位数
if(!commonChexk.jzisEmpty(str)) {
check = new RegExp("^[\u4e00-\u9fa50-9a-zA-Z\\s" + str + "]{1," + len + "}$", "gi");
} else {
check = new RegExp("^[\u4e00-\u9fa50-9a-zA-Z\\s]{1," + len + "}$", "gi");
}
msg += ",且最多" + len + "位字符";
}
if(!check.test(objval)) {
checkResult = false;
if(!commonChexk.jzisEmpty(pmsg)) {
msg = pmsg;
}
comErrorTip.cssTip(obj, msg);
} else {
comErrorTip.resetTilBorCss(obj);
}
}
return checkResult;
},

/**
*替换除开汉字,数字,字母及定义的str  keyup
* @param obj 对象
* @param str 自定义可输入字符
*/
jzcomKeyupText: function(obj, str) {
var objval = $(obj).val();
var check = /[^\u2E80-\u9FFFA0-9a-zA-Z]/g;
if(!commonChexk.jzisEmpty(str)){
check = new RegExp("[^\u2E80-\u9FFFA0-9a-zA-Z"+ str +"]","g");
}
objval = objval.replace(check,"");
$(obj).val(objval);
},

/**
* 自定义正则
* @param obj 对象
* @param check 自定义正则
* @param pmsg 自定义信息
* @param cannull 能否为空
* @param param 预留参数
* @returns Boolean
*/
jzdefaultZE: function(obj, check, pmsg, cannull, param) {
if(commonChexk.jzisEmpty(check)) {
return false;
}
var objval = $(obj).val();
if(commonChexk.jzisEmpty(objval)) {
objval = obj;
}
check = eval(check);
var checkResult = true;
if(commonChexk.jzisEmpty(cannull) || cannull == "cannull") {
//能为空
if(commonChexk.jzisEmpty(objval) || check.test(objval)) {
comErrorTip.resetTilBorCss(obj); //等于空或者验证通过
} else {
//不通过
checkResult = false;
if(commonChexk.jzisEmpty(pmsg)) {
pmsg = "验证不通过!";
}
comErrorTip.cssTip(obj, pmsg);
}
} else {
if(commonChexk.jzisEmpty(objval) || !check.test(objval)) { //等于空 ,不等于空但是验证错误 就不通过
checkResult = false;
if(commonChexk.jzisEmpty(pmsg)) {
pmsg = "验证不通过!";
}
comErrorTip.cssTip(obj, pmsg);
} else {
comErrorTip.resetTilBorCss(obj); //通过
}
}


return checkResult;
},


/**
* 判断是否为空
* @param obj
* @returns Boolean
*/
jzisEmpty: function(obj) {
if(obj == null || obj == undefined || typeof obj == "undefined" || obj.length == 0) { //|| $.trim(obj).length == 0
return true;
}
return false;
},


/**
* 格式化金额
* @param s 数字
* @param n 保留位数
* @returns 格式化后的金额
*/
jzformatMoneyValue: function(s, n) {
if(!commonChexk.jzisEmpty(s) && !isNaN(s)) {
n = n > 0 && n <= 20 ? n : 2;
s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).toFixed(n) + "";
var l = s.split(".")[0].split("").reverse(),
r = s.split(".")[1];
var t = "";
for(var i = 0; i < l.length; i++) {
t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");
}
var zs = t.split("").reverse().join("") + "." + r;


if(zs.indexOf("-,") != -1) {
return zs.replace("-,", "-");
}
return zs;
}
return "";
},


/**
* 格式化金额
* @param obj对象 
* @param n 保留位数
* @returns 格式化后的金额
*/
jzformatMoney: function(obj, n) {
var s = $(obj).val();
s = commonChexk.jzbackFormatMoney(s);
var maxLen = $(obj).attr("maxlength");
if(!commonChexk.jzisEmpty(maxLen) && !isNaN(maxLen)){
s += "";
if(s.length > maxLen){
$(obj).val("");
s = s.substr(0,maxLen);
}
}
if(isNaN(n)){
n = 2;
}
if(!commonChexk.jzisEmpty(s) && !isNaN(s)) {
n = n > 0 && n <= 20 ? n : 2;
s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).toFixed(n) + "";
var l = s.split(".")[0].split("").reverse(),
r = s.split(".")[1];
var t = "";
for(var i = 0; i < l.length; i++) {
t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");
}
var zs = t.split("").reverse().join("") + "." + r;


if(zs.indexOf("-,") != -1) {
return zs.replace("-,", "-");
}
$(obj).val(zs);
} else {
$(obj).val("");
}
},


/**
* 金额格式化还原
* @param s 数字
* @returns 格式化前的数据
*/
jzbackFormatMoney: function(s) {
var s = s + "";
if(!commonChexk.jzisEmpty(s)) {
return s.split(",").join("");
}
return "";
},


/**
* 单个数字变为大写
* * @returns 数字大写
*/
jznumUpper: function(n) {
if(!/^(0|[1-9]\d*)(\.\d+)?$/.test(n)) {
return;
} else {
var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
return digit[n];
}
},


/**
* 时间格式化
* @parma value 值
* @parma pattern 格式化标准
*/
jztimeFormat: function(value, pattern) {


if(!pattern) {
pattern = "yyyy-MM-dd  HH:mm:ss"
}


if(isNaN(value) || value == 0) {
return "";
}
var date = new Date(value);
var o = {
"M+": date.getMonth() + 1, //月份         
"d+": date.getDate(), //日         
"h+": date.getHours() % 12 == 0 ? 12 : date.getHours() % 12, //小时         
"H+": date.getHours(), //小时         
"m+": date.getMinutes(), //分         
"s+": date.getSeconds(), //秒         
"q+": Math.floor((date.getMonth() + 3) / 3), //季度         
"S": date.getMilliseconds() //毫秒         
};
if(/(y+)/.test(pattern)) {
pattern = pattern.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for(var k in o) {
if(new RegExp("(" + k + ")").test(pattern)) {
pattern = pattern.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
}
}
return pattern;
},


/**
* 只能输入数字,如果不是输入数字,则替换,推荐使用keyup绑定事件,.,和两位小数
* @parma obj 对象
* @parma IntergerMaxL 整数的最大位数,默认11
* @parma pointNum 小数位数 默认2
*/
jzkeyupNumber: function(obj,IntergerMaxL,pointNum) {
$(obj).on("input",function(){
var s = $(obj).val();
s = s.replace(/[^\d\.]/g,"");
$(obj).val(s);
});
obj.value = obj.value.replace(/[^\d.]/g, ""); // 清除“数字”和“.”以外的字符
obj.value = obj.value.replace(/^\./g, ""); // 验证第一个字符是数字而不是.
obj.value = obj.value.replace(/\.{2,}/g, "."); // 只保留第一个. 清除多余的.
// 小数点后面只能输入两位数
var pointMaxNum = 2;
if(!commonChexk.jzisEmpty(pointNum) && !isNaN(pointNum)){
pointMaxNum = parseInt(pointNum);
var pCheck = new RegExp("^(\-)*(\\d+)\.(\\d{"+ pointMaxNum +"}).*$","");
obj.value = obj.value.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".").replace(pCheck, '$1$2.$3');
}else{
obj.value = obj.value.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".").replace(/^(\-)*(\d+)\.(\d{2}).*$/, '$1$2.$3');
}
var InterMaxLen = 11;
if(!commonChexk.jzisEmpty(IntergerMaxL) && !isNaN(IntergerMaxL)){
InterMaxLen =  parseInt(IntergerMaxL);
}
$(obj).attr("maxlength",(InterMaxLen + pointMaxNum + 1));
var s = $(obj).val();
s += "";
if(s.length > InterMaxLen && s.indexOf(".") == -1){
s = s.substr(0,InterMaxLen);
$(obj).val(s);
}
},


/**
* 只能输入数字和自定义的组合,字符串,keyup
* @parma obj 对象
*/
jzdefaultNumer: function(obj, str) {
var check = /[^\d]/g;
if(!commonChexk.jzisEmpty(str)) {
check = new RegExp("[^\\d" + str + "]", "g");
}
obj.value = obj.value.replace(check, "");
},

/**
* 保留多少位数字
* @parma obj 对象
* @parma digit 保留位数
*/
jzdecimalDigit: function(obj,digit){
if(commonChexk.jzisEmpty(digit) || isNaN(digit)){
digit = 2;
}else{
digit = parseInt(digit);
}
obj.value = obj.value.replace(/[^\d.]/g, "");// 清除“数字”和“.”以外的字符
obj.value = obj.value.replace(/^\./g, "");// 验证第一个字符是数字而不是.
obj.value = obj.value.replace(/\.{2,}/g, ".");// 只保留第一个. 清除多余的.
// 小数点后面只能输入一位数
var dCheck = new RegExp("^(\-)*(\\d+)\.(\\d{"+ digit +"}).*$","");
obj.value = obj.value.replace(".", "$#$").replace(/\./g, "").replace("$#$",".").replace(dCheck, '$1$2.$3');
},


/**
* 验证YYYY-MM-DD日期格式,M,D均验证
* @parma obj 对象
* @parma cannull 能为非空 cannull cannotnull
* @parma pmsg 提示信息
*/
jztimeCheck: function(obj, pmsg, cannull) {
var check = /^([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))$/g;
var msg = "日期格式有误,应为YYYY-MM-DD";
//验证主体
var checkResult = checkMainJudge(obj,check,cannull,msg,pmsg);
return checkResult;
},


/**
* 数字的比较
* @param a 被比较对象
* @parma b 比较对象
* @return 1(a < b)       0(a = b)      -1(a > b)     false(a,b未定义)
*/
jznumCompare: function(a, b) {
var checkNum = "";
if(commonChexk.jzisEmpty(a) || commonChexk.jzisEmpty(b)) {
return false;
}
var re = new RegExp(",", "g");
if(a != 0 || a != "0") {
a = parseFloat(a.replace(re, ""));
}
if(b != 0 || b != "0") {
b = parseFloat(b.replace(re, ""));
}
if(a < b) {
checkNum = 1;
} else if(a == b) {
checkNum = 0;
} else {
checkNum = -1;
}
return checkNum;
},


/**
* 时间的比较相差天数
* @param sDate1 被比较对象 格式为 YYYY-MM-DD
* @parma sDate2 比较对象 格式为 YYYY-MM-DD
* @returns 相差天数
*/
jscompareDate: function(sDate1, sDate2) {
var time1 = arguments[0],
 time2 = arguments[1];
 time1 = Date.parse(time1) / 1000;
 time2 = Date.parse(time2) / 1000;
 var time_ = time1 - time2;
return Math.abs((time_ / (3600 * 24))) + 1;
},
/**
* 过滤脚本<script></script>
*/
jzFilteredJS: function(val){
var check = /<script.*?>.*?<\/script>/gi;
if(val != ""){
val = val.replace(check,"");
}
return val;
},
/**
* 处理最大长度maxlength的问题
*/
jzFilteredMaxLength: function(obj){
var maxLen = $(obj).attr("maxlength");
var s = $(obj).val();
if(!commonChexk.jzisEmpty(maxLen) && !isNaN(maxLen)){
s += "";
if(s.length > maxLen){
$(obj).val("");
s = s.substr(0,maxLen);
$(obj).val(s);
}
}
},

/**
* 删除JSON
* @param obj
* @returns {Boolean}
*/
delJsonStr: function(jsonObj, delStr) {
if(!szjzCustomUtils.isEmpty(delStr) && !szjzCustomUtils.isEmpty(jsonObj)) {
var dels = delStr.split(",");
for(var int = 0; int < dels.length; int++) {
delete jsonObj[dels[int]];
}
}
return jsonObj;
},

/**
* AJA封装类
* @param url
* @param datas
* @param _async
* @returns
*/
toAjaxPparam: function(url, datas, _async) {
var jsons;
$.ajax({
type: "POST",
url: path + url,
data: datas,
dataType: "json",
async: _async,
success: function(json) {
if(!json.success) {
try {
if(!szjzCustomUtils.isEmpty(toastr)) {
alert(json.message);
}
} catch(error) {
alert(json.message);
}
return;
}
jsons = json;
},
error: function(XMLHttpRequest, textStatus, errorThrown) {


}
});
if(szjzCustomUtils.isEmpty(jsons)) {
return;
}
return jsons;
}
}


/**
 * 正则验证主体
 * @param objval
 * @param cannull
 * @param check
 * @param obj
 * @param msg
 * @param pmsg
 * @param checkResult 
 */
function checkMainJudge(obj,check,cannull,msg,pmsg) {
var objval = $(obj).val();
var checkR = true;

objval = commonChexk.jzFilteredJS(objval);
$(obj).val(objval);

if(commonChexk.jzisEmpty(cannull) || cannull == "cannull") {
//能为空
if(commonChexk.jzisEmpty(objval) || check.test(objval)) {
comErrorTip.resetTilBorCss(obj); //等于空或者验证通过
} else {
//不为空,则去验证
checkR = false;
if(!commonChexk.jzisEmpty(pmsg)) {
msg = pmsg;
}
comErrorTip.cssTip(obj, msg);
}
} else {
if(commonChexk.jzisEmpty(objval) || !check.test(objval)) { //等于空 ,不等于空但是验证错误 就不通过
checkR = false;
if(!commonChexk.jzisEmpty(pmsg)) {
msg = pmsg;
}
comErrorTip.cssTip(obj, msg);
} else {
comErrorTip.resetTilBorCss(obj); //通过
}
}
return checkR;
}


//验证提示信息
var comErrorTip = {
alertTip: function(obj, msg) {
$(obj).css("border", "solid 1px #ffa8a8");
$(obj).attr("title", msg);
alert(msg);
},
cssTip: function(obj, msg) {
$(obj).css("border", "solid 1px #ffa8a8");
$(obj).attr("title", msg);
},
resetTilBorCss: function(obj) {
$(obj).css("border", "");
$(obj).removeAttr("title");
$(obj).removeClass("redBorder");
}
}


//foucs居左
function toLeft(obj) {
$(obj).removeClass("onTheRight").addClass("onTheLeft");
}
//blur居右
function toRight(obj) {
$(obj).removeClass("onTheLeft").addClass("onTheRight");
if(obj.value != "" && obj.value != null) {
obj.value = parseFloat(obj.value).toFixed(2);
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值