常见的输入值校验和替换操作,主要针对中国大陆地区的校验规则。 例如针对用户登录或注册时填写的信息进行校验,或者其他场景下可能用到的输入值校验。
全部方法如下:
- 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:除空格外的其他英文标点符号集:~`!@#$%^&*()-_+=\[]{};:"',<.>/?。 若需自定义符号集,例如“仅包含中划线和下划线”,将参数设置为"-_"即可。
校验是否为一个数字,以及该数字小数点位数是否与参数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
校验是否为一个整数。
校验规则:
- 若参数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
校验是否为非零的正整数。 参数使用方法和isInt()相同。
校验是否为非零的负整数。 参数使用方法和isInt()相同。
校验整数是否在取值范围内。
校验规则:
- 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
校验是否为中国大陆手机号。 参数value可以是数字或字符串。
校验规则:
- 总长度为11位
- 不能以10/11/12作为开头(这3个号段暂时不存在)
示例代码:
const valuetest = require('input-value');
console.log(valuetest.isTel('15800000000')); //true
console.log(valuetest.isTel('11000000000')); //false
校验是否为中国大陆传真或固定电话号码。
校验规则:
- 区号为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
校验是否为邮箱地址
校验规则:
- 邮箱用户名中可以出现-(中划线)或_(下划线)
- 邮箱域名后缀不限
- 邮箱域名可为IP地址
示例代码:
const valuetest = require('input-value');
console.log(valuetest.isEmail('xx@ab.xx')); //true
console.log(valuetest.isEmail('xx@ab.cd.xx')); //true
校验是否为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
校验是否为网址。
校验规则:
- 以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
校验是否为不含端口号的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均不在允许范围内
校验是否为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
校验是否为中国大陆第二代居民身份证。
校验规则:
- 共18位,最后一位可为X(大小写均可)
- 不能以0开头
- 出生年月日会进行校验:年份只能为18/19/2*开头,月份只能为01-12,日只能为01-31
示例代码:
const valuetest = require('input-value');
console.log(valuetest.isIDCard('410000179913320000')); //false 出生年月日不符合校验规则
校验是否为中国大陆邮政编码。 参数value为数字或字符串
校验规则:
- 共6位,且不能以0开头
示例代码:
const valuetest = require('input-value');
console.log(valuetest.isPostCode('12345')); //false 必须为6位
校验两个参数是否完全相同,包括类型。
校验规则:
- 值相同,数据类型也相同
示例代码:
const valuetest = require('input-value');
console.log(valuetest.same(2,'2')); //false 数据类型不同
校验字符的长度是否在规定的范围内。
校验规则:
- 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
v0.1.10版本以后不推荐使用,建议使用startByLetter()。
校验字符是否以字母开头。
校验规则:
- 必须以字母开头
- 开头的字母不区分大小写
示例代码:
const valuetest = require('input-value');
console.log(valuetest.startByLetter('abc')); //true
console.log(valuetest.startByLetter('0abc')); //false
校验字符是否以某字符串开头。
参数说明:
-
参数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,除非您有自己特殊的匹配规则,比如要匹配字符串“|”。
校验字符是否以某字符串结束。
参数说明:
-
参数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,除非您有自己特殊的匹配规则,比如要标点符号“.*”等拥有特殊含义。
校验字符是否为纯数字(整数)。
校验规则:
- 字符全部为正整数(包含0)
- 可以以0开头
示例代码:
const valuetest = require('input-value');
console.log(valuetest.pureNum('0123')); //true
console.log(valuetest.pureNum('01a23')); //false
返回字符串构成种类(字母,数字,标点符号)的数量。
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个参数'-_'表明可接受的标点符号仅为-_,而=?不在此范围里
校验字符串构成的种类数量是否大于或等于参数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 由于传递参数中可接受标点符号仅为'-_',而'='不在此范围内
清除所有空格。
示例代码:
const valuetest = require('input-value');
console.log(valuetest.clearSpaces(' a bc ')); //abc
清除所有中文字符(包括中文标点符号)。
示例代码:
const valuetest = require('input-value');
console.log(valuetest.clearCNChars('abc杨')); //abc
清除所有中文字符及空格。
示例代码:
const valuetest = require('input-value');
console.log(valuetest.clearCNCharsAndSpaces(' a b c杨 ')); //abc
除保留标点符号集以外,清除其他所有英文的标点符号(含空格)。 全部英文标点符号为: ~`!@#$%^&*()-_+=|\[]{};:"',<.>/?
参数excludePunctuation指需要保留的标点符号集,例如若传递的值为'_',即表示清除_以外的其他所有英文标点符号。
示例代码:
const valuetest = require('input-value');
console.log(valuetest.clearPunctuation(' a b c, _ ?')); //abc 清除掉所有的标点符号(含空格)
console.log(valuetest.clearPunctuation(' a b c, _ ?','_')); //abc_ 清除_以外的其他全部标点符号(含空格)
校验是否包含空格。
示例代码:
const valuetest = require('input-value');
console.log(valuetest.haveSpace(' a b c')); //true
console.log(valuetest.haveSpace('abc')); //false
校验是否包含中文字符(包括中文标点符号)。
示例代码:
const valuetest = require('input-value');
console.log(valuetest.haveCNChars('abc杨')); //true
若您在使用中发现有任何bug或建议,可反馈给我,邮箱:yangpuxiao@gmail.com