移动端过禁止输入emoji表情实现方案
最近手头上的项目有一个需求就是输入框不能输入表情,然后就各种在网上找资料,网上好多人给的方案是:
str = str.replace(/uD83C[uDF00-uDFFF]|uD83D[uDC00-uDE4F]/g, "");
用法大概就是:
<input onkeyup = "this.value = value.replace(/uD83C[uDF00-uDFFF]|uD83D[uDC00-uDE4F]/g, "")">;
这个对于搜狗输入法是有用的,但是我手机上换了讯飞输入法试了试,并没什么卵用,第三方书法的emoji表情unicode编码范围还真不好确定。
所以反着来。你不让输入表情,我就只能输入中文,英文,数字,标点符号不就实现需求了吗?
<input type="text" id="ipt1" oninput="value = value.replace(/[^u4E00-u9FA5|d|a-zA-Z| s,.?!,。?!…—&$=()-+/*{}[]]|s/g, '')" />
亲测有效。
///////////////////////////////////////////////////////////////////////////////
更新:
/////////////////////////////////////////////////////////////////////////////
上述的代码在ios端出现各种神奇的bug,简单点就是ios下不可用。所以还得找方法。还是找到了
// 判断是ios还是安卓 if (ios_or_android() == 'ios') { $("#post").on("keyup", function(){ var param = $(this).val(); var regRule = /[^u4E00-u9FA5|d|a-zA-Z| s,.?!,。?!…—&$=()-+/*{}[]]|s/g; $(this).val(param.replace(regRule,"")); }) } else { $("#post").on("input", function(){ var param = $(this).val(); var regRule = /[^u4E00-u9FA5|d|a-zA-Z| s,.?!,。?!…—&$=()-+/*{}[]]|s/g; $(this).val(param.replace(regRule,"")); }) } /* @功能:判断终端是ios还是安卓 */ function ios_or_android() { var u = navigator.userAgent; var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端 var isiOS = !!u.match(/(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端 if (isAndroid) { return 'and'; } else { return 'ios'; } }