前端常用的正则校验

博客介绍了多种信息格式的验证规则,包括IP地址、手机号码、身份证号码、邮箱、URL等,还涉及数值范围、字母大小写、密码、中文、账号等校验。同时给出使用方法,可在vs code搜索插件any - rule获取正则,使用时直接import引入并加入rules校验。

目录

1、是否合法IP地址

2、是否手机号码或者固话

3、是否固话

4、是否手机号码

5、是否身份证号码

6、是否邮箱

7、合法url

8、验证内容是否包含英文数字以及下划线

9、自动检验数值的范围

10、验证数字输入框最大数值

11、验证是否1-99之间

12、验证是否整数

13、验证是否整数,非必填

14、 验证是否是[0-1]的小数

15、 验证是否是[1-10]的小数,即不可以等于0

16、验证是否是[1-100]的小数,即不可以等于0

17、验证是否是[0-100]的小数

18、验证端口是否在[0,65535]之间

19、验证端口是否在[0,65535]之间,非必填,isMust表示是否必填

20、小写字母

22、两位小数验证

23、是否大写字母

24、是否大小写字母

25、密码校验

26、中文校验

27、 账号校验

28 、纯数字校验

29、最多一位小数

使用方法:


vs code 搜索插件any-rule,里面的正则全都有

1、是否合法IP地址

export function validateIP(rule, value,callback) {
  if(value==''||value==undefined||value==null){
    callback();
  }else {
    const reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\
![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2019/11/22/16e9182103044230~tplv-t2oaga2asx-image.image).(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
    if ((!reg.test(value)) && value != '') {
      callback(new Error('请输入正确的IP地址'));
    } else {
      callback();
    }
  }
}

2、是否手机号码或者固话

export function validatePhoneTwo(rule, value, callback) {
  const reg = /^((0\d{2,3}-\d{7,8})|(1[34578]\d{9}))$/;;
  if (value == '' || value == undefined || value == null) {
    callback();
  } else {
    if ((!reg.test(value)) && value != '') {
      callback(new Error('请输入正确的电话号码或者固话号码'));
    } else {
      callback();
    }
  }
}

3、是否固话

export function validateTelphone(rule, value,callback) {
  const reg =/0\d{2,3}-\d{7,8}/;
  if(value==''||value==undefined||value==null){
    callback();
  }else {
    if ((!reg.test(value)) && value != '') {
      callback(new Error('请输入正确的固定电话)'));
    } else {
      callback();
    }
  }
}

4、是否手机号码

export function validatePhone(rule, value,callback) {
  const reg =/^[1][3-9][0-9]{9}$/;
  if(value==''||value==undefined||value==null){
    callback();
  }else {
    if ((!reg.test(value)) && value != '') {
      callback(new Error('请输入正确的电话号码'));
    } else {
      callback();
    }
  }
}

5、是否身份证号码

export function validateIdNo(rule, value,callback) {
  const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
  if(value==''||value==undefined||value==null){
    callback();
  }else {
    if ((!reg.test(value)) && value != '') {
      callback(new Error('请输入正确的身份证号码'));
    } else {
      callback();
    }
  }
}

6、是否邮箱

export function validateEMail(rule, value,callback) {
  const reg =/^([a-zA-Z0-9]+[-_\.]?)+@[a-zA-Z0-9]+\.[a-z]+$/;
  if(value==''||value==undefined||value==null){
    callback();
  }else{
    if (!reg.test(value)){
      callback(new Error('请输入正确的邮箱'));
    } else {
      callback();
    }
  }
}

7、合法url

export function validateURL(url) {
  const urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/;
  return urlregex.test(url);
}

8、验证内容是否包含英文数字以及下划线

export function isPassword(rule, value, callback) {
  const reg =/^[_a-zA-Z0-9]+$/;
  if(value==''||value==undefined||value==null){
    callback();
  } else {
    if (!reg.test(value)){
      callback(new Error('仅由英文字母,数字以及下划线组成'));
    } else {
      callback();
    }
  }
}

9、自动检验数值的范围

export function checkMax20000(rule, value, callback) {
  if (value == '' || value == undefined || value == null) {
    callback();
  } else if (!Number(value)) {
    callback(new Error('请输入[1,20000]之间的数字'));
  } else if (value < 1 || value > 20000) {
    callback(new Error('请输入[1,20000]之间的数字'));
  } else {
    callback();
  }
}

10、验证数字输入框最大数值

export function checkMaxVal(rule, value,callback) {
  if (value < 0 || value > 最大值) {
    callback(new Error('请输入[0,最大值]之间的数字'));
  } else {
    callback();
  }
}

11、验证是否1-99之间

export function isOneToNinetyNine(rule, value, callback) {
  if (!value) {
    return callback(new Error('输入不可以为空'));
  }
  setTimeout(() => {
    if (!Number(value)) {
      callback(new Error('请输入正整数'));
    } else {
      const re = /^[1-9][0-9]{0,1}$/;
      const rsCheck = re.test(value);
      if (!rsCheck) {
        callback(new Error('请输入正整数,值为【1,99】'));
      } else {
        callback();
      }
    }
  }, 0);
}

12、验证是否整数

export function isInteger(rule, value, callback) {
  if (!value) {
    return callback(new Error('输入不可以为空'));
  }
  setTimeout(() => {
    if (!Number(value)) {
      callback(new Error('请输入正整数'));
    } else {
      const re = /^[0-9]*[1-9][0-9]*$/;
      const rsCheck = re.test(value);
      if (!rsCheck) {
        callback(new Error('请输入正整数'));
      } else {
        callback();
      }
    }
  }, 0);
}

13、验证是否整数,非必填

export function isIntegerNotMust(rule, value, callback) {
  if (!value) {
    callback();
  }
  setTimeout(() => {
    if (!Number(value)) {
      callback(new Error('请输入正整数'));
    } else {
      const re = /^[0-9]*[1-9][0-9]*$/;
      const rsCheck = re.test(value);
      if (!rsCheck) {
        callback(new Error('请输入正整数'));
      } else {
        callback();
      }
    }
  }, 1000);
}

14、 验证是否是[0-1]的小数

export function isDecimal(rule, value, callback) {
  if (!value) {
    return callback(new Error('输入不可以为空'));
  }
  setTimeout(() => {
    if (!Number(value)) {
      callback(new Error('请输入[0,1]之间的数字'));
    } else {
      if (value < 0 || value > 1) {
        callback(new Error('请输入[0,1]之间的数字'));
      } else {
        callback();
      }
    }
  }, 100);
}

15、 验证是否是[1-10]的小数,即不可以等于0

export function isBtnOneToTen(rule, value, callback) {
  if (typeof value == 'undefined') {
    return callback(new Error('输入不可以为空'));
  }
  setTimeout(() => {
    if (!Number(value)) {
      callback(new Error('请输入正整数,值为[1,10]'));
    } else {
      if (!(value == '1' || value == '2' || value == '3' || value == '4' || value == '5' || value == '6' || value == '7' || value == '8' || value == '9' || value == '10')) {
        callback(new Error('请输入正整数,值为[1,10]'));
      } else {
        callback();
      }
    }
  }, 100);
}

16、验证是否是[1-100]的小数,即不可以等于0

export function isBtnOneToHundred(rule, value, callback) {
  if (!value) {
    return callback(new Error('输入不可以为空'));
  }
  setTimeout(() => {
    if (!Number(value)) {
      callback(new Error('请输入整数,值为[1,100]'));
    } else {
      if (value < 1 || value > 100) {
        callback(new Error('请输入整数,值为[1,100]'));
      } else {
        callback();
      }
    }
  }, 100);
}

17、验证是否是[0-100]的小数

export function isBtnZeroToHundred(rule, value, callback) {
  if (!value) {
    return callback(new Error('输入不可以为空'));
  }
  setTimeout(() => {
    if (!Number(value)) {
      callback(new Error('请输入[1,100]之间的数字'));
    } else {
      if (value < 0 || value > 100) {
        callback(new Error('请输入[1,100]之间的数字'));
      } else {
        callback();
      }
    }
  }, 100);
}

18、验证端口是否在[0,65535]之间

export function isPort(rule, value, callback) {
  if (!value) {
    return callback(new Error('输入不可以为空'));
  }
  setTimeout(() => {
    if (value == '' || typeof(value) == undefined) {
      callback(new Error('请输入端口值'));
    } else {
      const re = /^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/;
      const rsCheck = re.test(value);
      if (!rsCheck) {
        callback(new Error('请输入在[0-65535]之间的端口值'));
      } else {
        callback();
      }
    }
  }, 100);
}

19、验证端口是否在[0,65535]之间,非必填,isMust表示是否必填

export function isCheckPort(rule, value, callback) {
  if (!value) {
    callback();
  }
  setTimeout(() => {
    if (value == '' || typeof(value) == undefined) {
      //callback(new Error('请输入端口值'));
    } else {
      const re = /^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/;
      const rsCheck = re.test(value);
      if (!rsCheck) {
        callback(new Error('请输入在[0-65535]之间的端口值'));
      } else {
        callback();
      }
    }
  }, 100);
}

20、小写字母

export function validateLowerCase(val) {
  const reg = /^[a-z]+$/;
  return reg.test(val);
}

22、两位小数验证

const validateValidity = (rule, value, callback) => {
  if (!/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/.test(value)) {
    callback(new Error('最多两位小数!!!'));
  } else {
    callback();
  }
};

23、是否大写字母

export function validateUpperCase(val) {
  const reg = /^[A-Z]+$/;
  return reg.test(val);
}

24、是否大小写字母

export function validatAlphabets(val) {
  const reg = /^[A-Za-z]+$/;
  return reg.test(val);
}

25、密码校验

export const validatePsdReg = (rule, value, callback) => {
  if (!value) {
    return callback(new Error('请输入密码'))
  }
  if (!/^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$)([^\u4e00-\u9fa5\s]){6,20}$/.test(value)) {
    callback(new Error('请输入6-20位英文字母、数字或者符号(除空格),且字母、数字和标点符号至少包含两种'))
  } else {
    callback()
  }
}

26、中文校验

export const validateContacts = (rule, value, callback) => {
  if (!value) {
    return callback(new Error('请输入中文'))
  }
  if (!/^[\u0391-\uFFE5A-Za-z]+$/.test(value)) {
    callback(new Error('不可输入特殊字符'))
  } else {
    callback()
  }
}

27、 账号校验

export const validateCode = (rule, value, callback) => {
  if (!value) {
    return callback(new Error('请输入账号'))
  }
  if (!/^(?![0-9]*$)(?![a-zA-Z]*$)[a-zA-Z0-9]{6,20}$/.test(value)) {
    callback(new Error('账号必须为6-20位字母和数字组合'))
  } else {
    callback()
  }
}

28 、纯数字校验

export const validateNumber = (rule, value, callback) => {
    let numberReg = /^\d+$|^\d+[.]?\d+$/
    if (value !== '') {
        if (!numberReg.test(value)) {
            callback(new Error('请输入数字'))
        } else {
            callback()
        }
    } else {
        callback(new Error('请输入值'))
    }
}

29、最多一位小数

const onePoint = (rule, value, callback) => {
  if (!/^[0-9]+([.]{1}[0-9]{1})?$/.test(value)) {
    callback(new Error('最多一位小数!!!'));
  } else {
    callback();
  }
};

使用方法:

在使用地方直接 import 引入,然后在 rules 校验中加入即可。

<think>首先,用户的问题是关于前端表单输入限制的。他们想要一个正则表达式,用于限制input输入框只能输入18位字符。用户提到“仅允许输入18位字符”,这可能是18个字符的长度,但字符类型没有指定。在之前的引用中,有例子限制输入中文、数字等,所以用户可能想要一个通用的18位字符限制。 回顾系统指令: - 所有行内数学表达式使用$...$。 - 独立公式使用$$...$$。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾添加引用标识。 - 结构清晰,帮助用户逐步解决问题。 用户提供的引用: - 引用[1]:限制输入英文字母和数字的正则表达式:`onkeyup="value=value.replace(/[^\w\.\/]/ig,'')"` - 引用[2]:各种限制,包括输入中文、全角字符、数字、数字和英文。 用户当前的查询:"我想前端表单输入限制,仅允许输入18位字符的正则表达式 请问前端 input 表单使用正则表达式限制输入必须为18位字符" 所以,用户需要一个正则表达式来确保输入必须是18个字符。字符类型没有指定,所以我应该假设是任何字符,除非指定。但通常,在表单中,字符可能包括字母、数字、符号等。用户说“18位字符”,可能意味着长度正好18个字符,字符可以是任何东西。 在正则表达式中,限制长度可以使用`^.{18}$`来匹配正好18个字符。但用户可能还想限制字符类型,比如只允许字母和数字,就像引用中那样。 用户没有指定字符类型,只说“18位字符”。在之前的引用中,有例子限制输入特定字符集。所以,我应该先确认或提供通用的长度限制。 为了安全,我应该提供一个只允许输入18个字符的正则表达式,并确保输入是有效的。 步骤: 1. 理解需求:限制输入为正好18个字符。 2. 正则表达式:`/^.{18}$/` 匹配任何18个字符。 3. 但是,在input事件中,我们通常使用`onkeyup`或`oninput`来实时替换无效字符,而不是等待整个输入。用户提供的例子中,使用`replace`来移除无效字符。 在引用中,例子是移除不匹配的字符,而不是检查长度。例如,`value.replace(/[^\w\.\/]/ig,'')` 移除所有非单词字符(字母、数字、下划线)。 对于长度限制,我们需要不同的方法。常见做法是: - 使用`maxlength`属性来限制最大长度。 - 或者使用正则表达式在提交时验证。 但用户指定了正则表达式,所以可能想用正则来实时限制。 在input事件中,我们可以截断超过18个字符的输入,或者阻止输入超过18个。 一个常见的方法是: - 使用`oninput`或`onkeyup`事件。 - 检查输入值的长度,如果超过18,截断到18个字符。 但用户要求正则表达式,所以或许提供一个正则来匹配18个字符。 正则表达式`/^.{18}$/` 用于完整匹配,但在实时输入中,我们需要在每次输入时验证。 更好的方式是使用`pattern`属性在HTML5中,用于表单验证。 例如: `<input pattern=".{18}" title="必须输入18个字符" required>` 这会在提交时检查输入正好18个字符。 但用户说“限制输入”,可能包括实时限制。 在引用中,他们使用`replace`方法,所以我可以提供一个类似的脚本。 用户说“仅允许输入18位字符”,意思是只允许输入18个字符,所以长度必须正好18。 建议: - 使用`maxlength="18"`属性来防止输入超过18个字符。 - 然后,使用正则表达式在提交时验证长度正好18。 但`maxlength`只限制最大长度,不强制最小长度。所以用户可能输入少于18个。 用户说“必须为18位字符”,所以可能要求正好18个字符。 因此,在正则表达式中,`^.{18}$` 匹配正好18个任意字符。 在实时输入中,我们可以这样实现: - 使用`oninput`事件。 - 如果输入长度超过18,截断到18个字符。 - 或者,只允许输入直到18个字符。 但用户指定正则表达式,所以我应该提供一个正则。 在引用中,例子是`value.replace(regex, '')` 来移除无效字符。 对于长度,我们不能直接移除,因为用户可能输入部分字符。 一个方式是:只允许输入字符,但限制长度不超过18。 例如:`oninput="this.value = this.value.slice(0, 18)"` 这直接截断到18个字符。 或者,使用正则:`oninput="this.value = this.value.replace(/^(.{0,18}).*$/, '$1')"` 但这不是高效。 更好的方式是`this.value = this.value.substring(0, 18);` 但用户要求正则表达式。 或许提供一个正则用于验证,而不是实时限制。 用户说“限制输入”,所以实时限制可能更好。 在回答中,我应该提供多种方法。 结构化回答: 1. 解释需求:限制输入为正好18个字符。 2. 提供HTML属性方法:使用`maxlength`和`minlength`,但`minlength`不强制在输入时,只提交时。 3. 提供JavaScript实时限制方法。 4. 提供正则表达式用于验证。 用户指定“正则表达式”,所以焦点在正则。 在正则中,匹配正好18个字符:`/^.{18}$/` 但在input事件中,使用`replace`不适合,因为我们需要处理长度。 参考引用[2],它使用`replace`来移除无效字符,但针对字符类型,不是长度。 对于长度,没有直接的正则`replace`方式。 我可以建议: - 使用`maxlength="18"` 来限制输入不超过18个字符。 - 然后,在表单提交时,使用正则验证长度正好18:`/^.{18}$/` 或者,使用JavaScript在输入时检查长度。 在回答中,提供代码示例。 生成相关问题。 使用中文回答。 引用:在回答中引用的段落末尾添加引用标识。但用户提供了引用[1]和[2],所以我应该引用它们,如果相关。 引用[1]是关于限制英文字母和数字,引用[2]有各种限制。 对于用户需求,引用不直接相关,但可以参考。 回答结构: - 先直接回答问题。 - 然后提供解释。 - 最后生成相关问题。 逐步: 1. 理解问题:用户需要限制输入为18个字符。 2. 正则表达式:`/^.{18}$/` 用于验证整个输入。 3. 对于实时限制,提供JavaScript代码。 4. 完整示例。 在HTML input中: - 使用`pattern`属性:`pattern=".{18}"` 要求正好18个字符。 - 或`minlength="18"` 和 `maxlength="18"`,但`minlength`在HTML5中支持,但可能不实时强制。 `minlength` 和 `maxlength` 属性可以设置,但浏览器可能在提交时验证。 对于实时效果,使用JavaScript。 代码示例: ```html <input type="text" id="inputField" maxlength="18"> <script> document.getElementById('inputField').addEventListener('input', function() { if (this.value.length > 18) { this.value = this.value.slice(0, 18); } }); </script> ``` 这确保输入不超过18个字符。 要强制正好18个,在提交时验证。 正则验证:`var regex = /^.{18}$/; if (!regex.test(inputValue)) { alert("必须输入18个字符"); }` 用户可能想要只允许特定字符,但问题中没有指定,所以假设任何字符。 在回答中,我可以说:如果您想限制字符类型,请指定。 生成相关问题: 1. 如何限制输入只允许数字? 2. 如何实现实时长度限制? 3. 表单提交时如何验证输入? 现在,数学表达式:用户问题中没有数学,所以可能不需要。但如果涉及,使用$...$。 在回答中,没有数学,所以忽略。 添加引用:用户提供了引用[1]和[2],但针对不同限制。我可以在相关部分引用。 例如,如果讨论字符类型限制,引用它们。 但这里焦点在长度,所以可能不直接相关。 在回答末尾,添加引用标识。 系统指令说:"回答中引用的段落末尾自然地添加引用标识",所以如果我在回答中提到引用,添加。 例如,"如引用[2]所示,正则表达式可以用于限制输入内容。" 但在这里,用户引用是供参考,不是必须。 最终回答。</think>### 前端 input 表单使用正则表达式限制输入必须为18位字符 根据您的需求,您希望在前端表单中限制 input 输入框仅允许输入正好18个字符(长度必须为18位)。字符类型未指定,因此默认允许任何字符(包括字母、数字、符号等)。以下是针对此问题的逐步解决方案,结合正则表达式和前端实现方法。实现包括实时输入限制(在用户输入时生效)和表单验证(提交时检查),确保输入严格符合要求。 #### 1. **核心正则表达式** - 用于验证输入**正好18个字符**(任意字符)的正则表达式为: `^.{18}$` - `^` 表示字符串开始。 `.` 匹配任何单个字符(换行符除外)。 `{18}` 表示前面的字符(即`.`)必须出现正好18次。 `$` 表示字符串结束。 - 此正则表达式适用于**表单提交时的验证**,例如在 JavaScript 中使用 `test()` 方法检查输入是否合法。 #### 2. **实时输入限制的实现方法** 在 input 事件中,使用 JavaScript 实时限制输入长度不超过18个字符。结合正则表达式,我们可以截断超长输入: - **HTML 和 JavaScript 代码示例**: ```html <input type="text" id="myInput" placeholder="请输入18位字符"> <script> document.getElementById('myInput').addEventListener('input', function(event) { // 获取输入值 let value = event.target.value; // 如果长度超过18,截取前18个字符 if (value.length > 18) { event.target.value = value.slice(0, 18); } }); </script> ``` - **说明**: - `input` 事件监听用户输入(包括粘贴、键盘输入等)。 - `value.slice(0, 18)` 确保输入值长度不超过18个字符。 - 此方法**实时生效**,用户无法输入超过18个字符。 如果您希望仅使用正则表达式实现类似效果(参考引用[2]中的方法),可以使用 `replace` 结合截断逻辑: ```html <input type="text" oninput="this.value = this.value.replace(/^(.{0,18}).*$/, '$1')"> ``` - **正则解析**:`/^(.{0,18}).*$/` 匹配整个输入,但只保留前18个字符(`$1` 捕获组),移除多余部分。 - 注意:此方法不如 `slice` 高效,但符合正则表达式要求。 #### 3. **表单提交时的完整验证** 在表单提交时,使用正则表达式验证输入**正好为18个字符**(防止用户输入少于18个字符): - **HTML 和 JavaScript 代码示例**: ```html <form id="myForm"> <input type="text" id="myInput" required> <button type="submit">提交</button> </form> <script> document.getElementById('myForm').addEventListener('submit', function(event) { let inputValue = document.getElementById('myInput').value; let regex = /^.{18}$/; if (!regex.test(inputValue)) { alert("输入必须正好为18个字符!"); event.preventDefault(); // 阻止表单提交 } }); </script> ``` - **说明**: - `regex.test(inputValue)` 检查输入是否匹配 `^.{18}$`。 - 如果输入长度不足或超过18个字符,提示错误并阻止提交。 #### 4. **结合 HTML5 属性简化** HTML5 提供了原生属性来辅助长度限制,但需注意: - `maxlength="18"`:限制最大输入长度为18(实时生效,但允许少于18个字符)。 - `minlength="18"`:在提交时验证最小长度(部分浏览器支持),但不能实时限制。 - 推荐组合使用: ```html <input type="text" pattern=".{18}" title="必须输入正好18个字符" required> ``` - `pattern=".{18}"` 使用正则表达式在提交时验证长度。 - `title` 属性提供错误提示。 #### 注意事项 - **字符类型限制**:如果需限制字符类型(如只允许数字或字母),可修改正则表达式: - 例如,只允许英文字母和数字(参考引用[1][^1]和引用[2][^2]):`/^[a-zA-Z0-9]{18}$/`。 - 如需帮助,请提供具体字符要求。 - **性能建议**:实时输入限制使用 `input` 事件(而非 `keyup`),以处理粘贴等操作。 - **兼容性**:上述方法在所有现代浏览器中有效。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值