示例代码:匹配
<input class="test" type="number" value="{{test}}" bindinput="input_test" />
type="number"控制弹起数字键盘
input_test(e) {
let value = this.validateNumber(e.detail.value)
this.setData({
test: value
})
},
validateNumber(val) {
if(isNaN(val)){
wx.showToast({
title: '请输入数字',
icon: 'none',
})
}
val = val.replace(/[\D]/g, '') // 去除非数字的符号
if(val == '0'){
return val
}
val = val.replace(/^0+/, '') // 去掉整数部分高位的连续零
return val
},
本质:正则表达式匹配
要判断是不是某一些字符,用正则表达式实现,然后加一个.test(要判断的内容)即可,如果要判断的内容符合正则表达式定义,则返回true,否则返回false
格式:正则表达式.test(要判断的字符串)
如上:/[^\d.]/.test(val)判断val是不是数字或者小数点以外的字符
在 JavaScript 中,正则表达式可以通过字面量或构造函数创建。下面是两种常见的方式:
字面量方式(推荐):
const regex = /[^\d.]/g;
在字面量方式中,正则表达式直接写在两个斜杠之间。
构造函数方式:
Copy code
const regex = new RegExp('[^\\d.]', 'g');
在构造函数方式中,正则表达式作为字符串传递给 RegExp 对象,并且需要双反斜杠来转义特殊字符。
一个一定要注意的点
在正常情况下,正则匹配到第一个匹配项则停止,并且默认大小写敏感,如果想修改默认选项,则需要修饰符。
所以如下代码:
validateNumber(val) {
if(!(/[0-9]+\.[0-9]+/.test(val) || /[1-9][0-9]*/.test(val) || /0/.test(val))){
return false
}
return true
},
本意是:匹配合法的整数和小数,所以诸如098和4.ra这种都是不合法的。
但是由于正则匹配默认匹配到第一个匹配项即停止,所以098会因为匹配到0那个匹配项而匹配停止认为合法,同样的4.ra会因为4匹配到匹配项和匹配停止认为合法
所以要用到开始^和结束$符号来修饰,改正如下就对了,在每个匹配项上都加上开始和结束符号,意思是要从输入的字符串val开始匹配到字符串结束,只有当整个串符合定义的某个项,才认认为匹配到项了:
validateNumber(val) {
if(!(/^[0-9]+\.[0-9]+$/.test(val) || /^[1-9][0-9]*$/.test(val) || /^0$/.test(val))){
return false
}
return true
},
其他注意点
- ^:
- 在方括号内使用 ^ 表示对字符集合取反,即匹配除了指定字符之外的任何字符。
- 不在方括号内使用的,如/^0+/ 中的 ^ 表示匹配字符串的开头,后面的 0+ 表示匹配一个或多个连续的零。
- $:表示整个字符串的结束
所以/^0+/用于匹配字符串开头连续的零 - \d: 表示匹配数字。\
- \D: 匹配任何非数字字符
- g 是全局标志,表示在整个字符串中查找所有匹配项,而不是要从头开始从左至右匹配
例如:怎么判断是数字还是字母
来自ChatGPT,顺便附上一下
法一:使用正则表达式
在JavaScript中,正则表达式提供了一种有效的方法来检查一个字符是字母还是数字。
function isDigit(char) {
return /\d/.test(char);
}
function isLetter(char) {
return /[a-zA-Z]/.test(char);
}
// 使用示例
console.log(isDigit('5')); // true
console.log(isLetter('A')); // true
上述示例中,/\d/ 匹配数字,/[a-zA-Z]/ 匹配字母。
法二:使用内置方法:isNaN函数
在JavaScript中,有一些内置方法可以判断一个字符是字母还是数字。
function isDigit(char) {
return !isNaN(parseInt(char)) && isFinite(char);
}
function isLetter(char) {
return char.toLowerCase() !== char.toUpperCase();
}
// 使用示例
console.log(isDigit('5')); // true
console.log(isLetter('A')); // true
isNaN() 函数用于判断一个值是否是非0-9的数字值,parseInt() 函数用于解析一个字符串,并返回一个整数。toLowerCase() 和 toUpperCase() 方法用于将字符转换为小写或大写形式,通过比较这两个形式来判断是否为字母。
参考:
参考