npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

input-value

v0.1.11

Published

常见的输入值校验和替换操作,主要针对中国大陆地区的校验规则。

Downloads

40

Readme

input-value

概述

常见的输入值校验和替换操作,主要针对中国大陆地区的校验规则。 例如针对用户登录或注册时填写的信息进行校验,或者其他场景下可能用到的输入值校验。

全部方法如下:

- isNum,isInt,isPInt,isNInt,checkIntRange
- isTel,isFax,isEmail,isQQ,isURL,isIP,isIPv6,isIDCard,isPostCode
- same,lengthRange,startByLetter,startBy,endBy,pureNum,getLIPTypes,pureLIP
- clearSpaces,clearCNChars,clearCNCharsAndSpaces,clearPunctuation,
- haveSpace,haveCNChars

注意:

  • 绝大多数的方法返回值为 true or false
  • getLIPTypes方法返回值为0-3

安装代码

在Nodejs中安装代码

npm install --save input-value

若您想在浏览器环境中使用,可以从https://github.com/puxiao/input-value/blob/master/index.js 获取。 下载index.js,并删除该JS文件中module.exports部分。

示例代码

使用场景1:用户注册时,用户名不能包含空格,可以使用以下代码进行校验:

const valuetest = require('input-value');  
let username = 'abc d';  
console.log(valuetest.haveSpace(username)); //true  校验到有空格后,可提醒用户  

//或者我们直接清除掉用户输入中的空格  
username = valuetest.clearSpaces(username); //abcd  

使用场景2:用户密码规范中要求,密码为字母、数字、标点符号(空格除外),并且构成中至少包含其中的2种。

可以使用以下代码进行校验:

const valuetest = require('input-value');  
let password = 'abc123';  
console.log(valuetest.pureLIP(password,2)); //true  
console.log(valuetest.pureLIP(password,3)); //false 若参数为3表示构成种类必须全部包含字母、数字和标点符号  

参数约定

  • value:类型为Number的参数

  • str:类型为String的参数

  • floats:小数点后的位数

  • minLength:数字或字符的最小长度或固定长度,若不设置则表示不限制

  • maxLength:数字或字符的最大长度,若不设置则表示不限制(JS中最大整数为9007199254740991)

  • minInt:在取值范围中,最小的整数

  • maxInt:在取值范围中,最大的整数,若不设置则表示不限制

  • punctuation:除空格外的其他英文标点符号集:~`!@#$%^&*()-_+=\[]{};:"',<.>/?。 若需自定义符号集,例如“仅包含中划线和下划线”,将参数设置为"-_"即可。

全部方法(API)

isNum(value,floats=null)

校验是否为一个数字,以及该数字小数点位数是否与参数floats一致。

校验规则:

  • 若参数floats有值,则校验该数字小数点后的位数。
  • 若参数floats没有值,则仅仅校验是否为数字。

示例代码:

const valuetest = require('input-value');  
console.log(valuetest.isNum(2)); //true  
console.log(valuetest.isNum(2.123)); //true  
console.log(valuetest.isNum(2.123,2)); //false  
console.log(valuetest.isNum(2.123,3)); //true  

//注意:由于String(2.0)为'2',并非'2.0',所以小数点后全部为0的校验结果会和预期的不一致,比如  
console.log(valuetest.isNum(2.0,1)); //false  

isInt(value,minLength=null,maxLength=undefined)

校验是否为一个整数。

校验规则:

  • 若参数minLength和maxLength均为null或undefined,则仅仅校验参数value是否为整数。
  • 若参数minLength有值、maxLength为undefined,则校验该整数的位数是否等于minLength
  • 若参数minLength有值、maxLength为null,则校验该整数的位数是否大于等于minLength
  • 若参数minLength和maxLength均有值,则校验该整数的位数是否大于等于minLength,并且小于等于maxLength。

示例代码:

const valuetest = require('input-value');  
console.log(valuetest.isInt(123)); //true  
console.log(valuetest.isInt(123,2)); //false  
console.log(valuetest.isInt(123,2,null)); //true  
console.log(valuetest.isInt(123,3)); //true  
console.log(valuetest.isInt(123,1,4)); //true  

isPInt(value,minLength=null,maxLength=undefined)

校验是否为非零的正整数。 参数使用方法和isInt()相同。

isNInt(value,minLength=null,maxLength=undefined)

校验是否为非零的负整数。 参数使用方法和isInt()相同。

checkIntRange(value,minInt,maxInt=9007199254740991)

校验整数是否在取值范围内。

校验规则:

  • minInt为在取值范围中最小的整数
  • maxInt为在取值范围中最大的整数

示例代码:

const valuetest = require('input-value');  
console.log(valuetest.checkIntRange(2,2)); //true  
console.log(valuetest.checkIntRange(2,3)); //false  
console.log(valuetest.checkIntRange(2,1,3)); //true  

isTel(value)

校验是否为中国大陆手机号。 参数value可以是数字或字符串。

校验规则:

  • 总长度为11位
  • 不能以10/11/12作为开头(这3个号段暂时不存在)

示例代码:

const valuetest = require('input-value');  
console.log(valuetest.isTel('15800000000')); //true  
console.log(valuetest.isTel('11000000000')); //false  

isFax(str)

校验是否为中国大陆传真或固定电话号码。

校验规则:

  • 区号为3-4位
  • 号码为7-8位
  • 没有区号,仅有号码也可以
  • 区号和号码之间可以存在“-”

示例代码:

const valuetest = require('input-value');  
console.log(valuetest.isFax('037188888888')); //true  
console.log(valuetest.isFax('0371-88888888')); //true  
console.log(valuetest.isFax('012-8888888')); //true  

isEmail(str)

校验是否为邮箱地址

校验规则:

  • 邮箱用户名中可以出现-(中划线)或_(下划线)
  • 邮箱域名后缀不限
  • 邮箱域名可为IP地址

示例代码:

const valuetest = require('input-value');   
console.log(valuetest.isEmail('[email protected]')); //true  
console.log(valuetest.isEmail('[email protected]')); //true  

isQQ(value)

校验是否为QQ号码。 参数value为数字或字符串

校验规则:

  • 非0开头的5位-13位整数

示例代码:

const valuetest = require('input-value');  
console.log(valuetest.isQQ('78657141')); //true  
console.log(valuetest.isQQ('1234')); //false  
console.log(valuetest.isQQ('12345678901234')); //false  

isURL(str)

校验是否为网址。

校验规则:

  • 以https://、http://、ftp://、rtsp://、mms://开头、或者没有这些开头
  • 可以没有www开头(或其他二级域名),仅域名
  • 网页地址中允许出现/%*?@&等其他允许的符号

示例代码:

const valuetest = require('input-value');  
console.log(valuetest.isURL('puxiao.com')); //true  
console.log(valuetest.isURL('https://www.puxiao.com/mynpm/index.html?url=https://npmjs.com')); //true  

isIP(str)

校验是否为不含端口号的IP地址。

校验规则:

  • IP格式为xxx.xxx.xxx.xxx,每一项数字取值范围为0-255
  • 除0以外其他数字不能以0开头,比如02

示例代码:

const valuetest = require('input-value');  
console.log(valuetest.isIP('256.02.0.0')); //false 256和02均不在允许范围内  

isIPv6(str)

校验是否为IPv6地址。

校验规则:

  • 支持IPv6正常格式
  • 支持IPv6压缩格式

示例代码:

const valuetest = require('input-value');  
console.log(valuetest.isIPv6('2001:0410:0000:0000:FB00:1400:5000:45FF')); //true  
console.log(valuetest.isIPv6('2001:0410::FB00:1400:5000:45FF')); //true  

isIDCard(str)

校验是否为中国大陆第二代居民身份证。

校验规则:

  • 共18位,最后一位可为X(大小写均可)
  • 不能以0开头
  • 出生年月日会进行校验:年份只能为18/19/2*开头,月份只能为01-12,日只能为01-31

示例代码:

const valuetest = require('input-value');  
console.log(valuetest.isIDCard('410000179913320000')); //false 出生年月日不符合校验规则  

isPostCode(value)

校验是否为中国大陆邮政编码。 参数value为数字或字符串

校验规则:

  • 共6位,且不能以0开头

示例代码:

const valuetest = require('input-value');  
console.log(valuetest.isPostCode('12345')); //false 必须为6位  

same(firstValue,secondValue)

校验两个参数是否完全相同,包括类型。

校验规则:

  • 值相同,数据类型也相同

示例代码:

const valuetest = require('input-value');  
console.log(valuetest.same(2,'2')); //false 数据类型不同  

lengthRange(str,minLength,maxLength=9007199254740991)

校验字符的长度是否在规定的范围内。

校验规则:

  • minInt为在取值范围中最小的长度
  • maxInt为在取值范围中最大的长度

示例代码:

const valuetest = require('input-value');  
console.log(valuetest.lengthRange('abcd',3)); //true  字符长度需>=3  
console.log(valuetest.lengthRange('abcd',5)); //false  字符长度需>=5  
console.log(valuetest.lengthRange('abcd',3,5)); //true  字符长度需>=3、<=5  

letterBegin(str)

v0.1.10版本以后不推荐使用,建议使用startByLetter()。

startByLetter(str)

校验字符是否以字母开头。

校验规则:

  • 必须以字母开头
  • 开头的字母不区分大小写

示例代码:

const valuetest = require('input-value');  
console.log(valuetest.startByLetter('abc')); //true  
console.log(valuetest.startByLetter('0abc')); //false  

startBy(str,keyword,escape=true)

校验字符是否以某字符串开头。

参数说明:

  • 参数keyword为“开头字符串”,字符串中若出现“|”则表示“或”,例如keyword = "admin|user"表示“admin或user”。

  • 参数escape表示是否需要对keyword中的标点符号进行转义,默认为true。

  • 若参数escape=false,则不进行转义,那么此时keyword可以是字符串,也可以是正则表达式(不需要前后添加/)。

  • 若参数keyword为纯字母或数字,不包含任何标点符号,那么无论escape是否为true,都不会影响最终校验结果。

补充说明:

  • 这里的标点符号转义并不是使用JavaScript中默认函数escape()进行转义。

  • 执行转义的标点符号有(含空格): ~`!@#$%^&*()-_+=\[]{};:"',<.>/?,请注意“|”并不会进行转义。

示例代码 1:

const valuetest = require('input-value');

let str = '/admin/login.html';

console.log(valuetest.startBy(str,'/admin')); //true
console.log(valuetest.startBy(str,'admin')); //false
console.log(valuetest.startBy(str,'user')); //false
console.log(valuetest.startBy(str,'/admin|/user')); //true 校验是否以/admin或/user开头

示例代码 2:

const valuetest = require('input-value');

let str = '/admin/login.html';

console.log(valuetest.startBy(str,'/admin',false)); //true

//在正则表达式中,各种标点符号具有自身的含义,例如“.”代表 匹配除换行符 \n之外的任何单字符。
console.log(valuetest.startBy(str,'.admin',false));  //true
//上述代码返回结果为true,是因为没有对符号.进行转义,这里的“.”匹配除换行符 \n之外的任何单字符。

console.log(valuetest.startBy(str,'\\.admin',false)); //false
//通过对keyword中点.进行转义,这次结果符合我们的预期。

//如果没有特殊需求,不建议设置escape=false,除非您有自己特殊的匹配规则,比如要匹配字符串“|”。

function endBy(str,keyword,escape=true)

校验字符是否以某字符串结束。

参数说明:

  • 参数keyword为“结束字符串”,字符串中若出现“|”则表示“或”,例如keyword = ".css|.jpg"表示“.css或.jpg”。

  • 参数escape表示是否需要对keyword中的标点符号进行转义,默认为true。

  • 若参数escape=false,则不进行转义,那么此时keyword可以是字符串,也可以是正则表达式(不需要前后添加/)。

  • 若参数keyword为纯字母或数字,不包含任何标点符号,那么无论escape是否为true,都不会影响最终校验结果。

补充说明:

  • 这里的标点符号转义并不是使用JavaScript中默认函数escape()进行转义。

  • 执行转义的标点符号有(含空格): ~`!@#$%^&*()-_+=\[]{};:"',<.>/?,请注意“|”并不会进行转义。

示例代码 1:

const valuetest = require('input-value');

let str = '/css/base.css';
let str2 = '/css/base.css.jpg';

console.log(valuetest.endBy(str,'.css')); //true
console.log(valuetest.endBy(str,'.css|.jpg')); //true 校验是否以.css或.jpg结尾

console.log(valuetest.endBy(str2,'.css')); //false
console.log(valuetest.endBy(str2,'.jpg')); //true

示例代码 2:

const valuetest = require('input-value');

let str = '/css/basecss';//请注意css前面没有"."

console.log(valuetest.endBy(str,'css',false)); //true

//在正则表达式中,各种标点符号具有自身的含义,例如“.”代表 匹配除换行符 \n之外的任何单字符。
console.log(valuetest.endBy(str,'.css',false)); //true
//上述代码返回结果为true,是因为没有对符号.进行转义,这里的“.”匹配除换行符 \n之外的任何单字符。

//通过对keyword中点.进行转义,这次结果符合我们的预期。
console.log(valuetest.endBy(str,'\\.css',false)); //false

//如果没有特殊需求,不建议设置escape=false,除非您有自己特殊的匹配规则,比如要标点符号“.*”等拥有特殊含义。

pureNum(str)

校验字符是否为纯数字(整数)。

校验规则:

  • 字符全部为正整数(包含0)
  • 可以以0开头

示例代码:

const valuetest = require('input-value');  
console.log(valuetest.pureNum('0123')); //true  
console.log(valuetest.pureNum('01a23')); //false  

getLIPTypes(str,punctuation=null)

返回字符串构成种类(字母,数字,标点符号)的数量。

LIP缩写的由来:L(letter 字母) + I(uint 数字) + P(punctuation 标点符号)

参数punctuation的说明:

  • punctuation指可接受的标点符号集

  • 若需自定义符号集,例如“仅包含中划线和下划线”,将参数设置为"-_"即可

  • 若不传值或默认为null,则内部默认标点符号集为除空格外的其他英文标点符号:~`!@#$%^&*()-_+=|[]{};:"',<.>/?

示例代码:

const valuetest = require('input-value');  
console.log(valuetest.getLIPTypes('abc')); //1  
console.log(valuetest.getLIPTypes('abc123')); //2  
console.log(valuetest.getLIPTypes('abc123=?')); //3  

console.log(valuetest.getLIPTypes('abc123=?','-_')); //2  第2个参数'-_'表明可接受的标点符号仅为-_,而=?不在此范围里  

pureLIP(str,num=1,punctuation=null)

校验字符串构成的种类数量是否大于或等于参数num的值。 通常用来校验用户设置的密码复杂程度。

校验规则:

  • 参数num为需要构成的种类(字母、数字、标点符号),该值只能是1-3。
  • 默认参数num的值为1,即表示:至少包含字母,数字,标点符号中的1种
  • 若参数num的值为2,即表示:至少包含字母,数字,标点符号中的2种
  • 若参数num的值为3,即表示:必须同时包含字母,数字,标点符号
  • 参数punctuation指可接受的标点符号集,具体设定可参考getLIPTypes()方法中关于标点符号集的解释。

示例代码:

const valuetest = require('input-value');  
console.log(valuetest.pureLIP('abc',2)); //false  传递的参数num=2,需要至少包含字母、数字、标点符号中的2种  
console.log(valuetest.pureLIP('abc123',2)); //true  
console.log(valuetest.pureLIP('abc123-',2)); //true  字符串的构成至少包含2种,而'abc123-'是3种组成,因此返回true  
console.log(valuetest.pureLIP('abc123-',3)); //true  
console.log(valuetest.pureLIP('abc123=',3,'-_')); //false  由于传递参数中可接受标点符号仅为'-_',而'='不在此范围内 

clearSpaces(str)

清除所有空格。

示例代码:

const valuetest = require('input-value');  
console.log(valuetest.clearSpaces(' a bc  ')); //abc  

clearCNChars(str)

清除所有中文字符(包括中文标点符号)。

示例代码:

const valuetest = require('input-value');  
console.log(valuetest.clearCNChars('abc杨')); //abc  

clearCNCharsAndSpaces(str)

清除所有中文字符及空格。

示例代码:

const valuetest = require('input-value');  
console.log(valuetest.clearCNCharsAndSpaces(' a b c杨  ')); //abc  

clearPunctuation(str,excludePunctuation=null)

除保留标点符号集以外,清除其他所有英文的标点符号(含空格)。 全部英文标点符号为: ~`!@#$%^&*()-_+=|\[]{};:"',<.>/?

参数excludePunctuation指需要保留的标点符号集,例如若传递的值为'_',即表示清除_以外的其他所有英文标点符号。

示例代码:

const valuetest = require('input-value');  
console.log(valuetest.clearPunctuation(' a b c, _ ?')); //abc  清除掉所有的标点符号(含空格)  
console.log(valuetest.clearPunctuation(' a b c, _ ?','_')); //abc_ 清除_以外的其他全部标点符号(含空格)  

haveSpace(str)

校验是否包含空格。

示例代码:

const valuetest = require('input-value');  
console.log(valuetest.haveSpace(' a b c')); //true  
console.log(valuetest.haveSpace('abc')); //false  

haveCNChars(str)

校验是否包含中文字符(包括中文标点符号)。

示例代码:

const valuetest = require('input-value');  
console.log(valuetest.haveCNChars('abc杨')); //true  

反馈

若您在使用中发现有任何bug或建议,可反馈给我,邮箱:[email protected]