mysql 过滤微信昵称表情符号_js 过滤微信昵称的表情符号

mysql 过滤微信昵称表情符号_js 过滤微信昵称的表情符号我先说一下我的解决方法://示例名称:varstr=”阿bc?d的fg?hm天l”;//将名称拆分为数组,注意:这样会将表情拆分为两项,其值为代理对.//并且因为,代理对无法被浏览器识别,所以它们的值可能会被转化为U+feffvarstrArr=str.split(“”),result=””,totalLen=0;for(varidx=0;idx<s…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

我先说一下我的解决方法:

// 示例名称:

var str = “阿bc?d的fg?hm天l”;

// 将名称拆分为数组,注意: 这样会将表情拆分为两项,其值为代理对.

// 并且因为,代理对无法被浏览器识别,所以它们的值可能会被转化为 U+feff

var strArr = str.split(“”),

result = “”,

totalLen = 0;

for(var idx = 0; idx < strArr.length; idx ++) {

// 超出长度,退出程序

if(totalLen >= 16) break;

var val = strArr[idx];

// 英文,增加长度1

if(/[a-zA-Z]/.test(val)) {

totalLen = 1 + (+totalLen);

result += val;

}

// 中文,增加长度2

else if(/[\u4e00-\u9fa5]/.test(val)) {

totalLen = 2 + (+totalLen);

result += val;

}

// 遇到代理字符,将其转换为 “口”, 不增加长度

else if(/[\ud800-\udfff]/.test(val)) {

// 代理对长度为2,

if(/[\ud800-\udfff]/.test(strArr[idx + 1])) {

// 跳过下一个

idx ++;

}

// 将代理对替换为 “口”

result += “口”;

}

};

再说一下我的思路:

1) 首先我知道,这些表情其实也是一种文字,它可以看做某个UTF-16 的码点.可以参见这个附录:

2) 这些表情的码点在UTF-16中是有自己的范围的.而JS中可以通过正则表达式来检测一个文字的码点值

.从而判断它的类型,同理也可以用来判断它是不是 中文/英文等.在这个问题里,只需要判断其是否为中

文/英文即可.

3) 为什么是8个中文/16个英文啊?这到底是谁规定的? UTF8 是变长的,中文可能是 2-3个长度,UTF16 里面

中文和英文长度是一样的.所以我很想知道这个规则是干什么的?

PS: 这里的长度是编码单元长度,以 UTF16/UCS2 为例, 一个编码单元16位、2个字节,在UTF16下英文和中文

都是 U+0000 这样的形式,长度相等.除了部分代理对,它们的长度为2,占用32位、两个编码单元外(有无为3的我还

真不知道)。

欢迎大家来讨论.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230608.html原文链接:https://javaforall.net

(0)
上一篇 2025年6月19日 下午2:15
下一篇 2025年6月19日 下午2:43


相关推荐

  • 有趣的微分方程之常数变易法

    有趣的微分方程之常数变易法什么是常数变易法呢 常数变易法是一种解线性微分方程的行之有效的方法 它是拉格朗日十一年的研究成果 我们所用仅是他的结论 并无过程 https baike baidu com item E5 B8 B8 E6 95 B0 E5 8F 98 E6 98 93 E6 B3 95 fr aladdin 百度百科连接 求解过程呢 一阶假如我们有一个非齐次线性微分方程 一

    2026年3月16日
    2
  • KVM虚拟机搭建

    KVM虚拟机搭建KVM 的安装配置与基本操作目录第一部分实验环境第二部分安装图形界面第三部分配置 KVM 虚拟化第四部分创建桥接网卡第五部分 KVM 虚拟环境中安装系统第六部分克隆第七部分其它命令第一部分实验环境 Linux 服务器一台 IP 地址 192 168 80 40 kvm01 第二部分安装图形界面 root kvm01 yumgroupinst GNOME 桌面 y 安装图形界面注意 如果在控制台上操作 或者没有中文环境 yumgroupinst GNOMED

    2026年3月20日
    1
  • css经典布局——双飞翼布局

    圣杯布局的出现是来自由MatthewLevine在2006年写的一篇文章《InSearchoftheHolyGrail》,在国内最早是淘宝UED的工程师(玉伯大大)对圣杯布局改进并传播开来,在中国的叫法是双飞翼布局。圣杯布局和双飞翼布局达到的效果基本相同,都是侧边两栏宽度固定,中间栏宽度自适应。主要的不同之处就是在解决中间部分…

    2022年4月5日
    69
  • java memorystream 包_MemoryStream

    java memorystream 包_MemoryStreamMemoryStream 位于 System IO 命名空间 为系统内存提供流式的读写操作 常作为其他流数据交换时的中间对象操作 1 MemoryStream 类封装一个字节数组 在构造实例时可以使用一个字节数组作为参数 但是数组的长度无法调整 使用默认无参数构造函数创建实例 可以使用 Write 方法写入 随着字节数据的写入 数组的大小自动调整 2 在对 MemoryStream 类中数据流进行读取时 可以使用

    2026年3月20日
    1
  • 图解数据库左连接、右连接、内连接、外连接、全连接的区别

    图解数据库左连接、右连接、内连接、外连接、全连接的区别数据库连表方式内连接 inner innerjoin 外连接 outerjoin 左外连接 leftouterjoi 左连接 leftjoin 右外连接 rightouterjo 右连接 rightjoin 全连接 fulljoin union 准备现在有 2 张表 A 表和 B 表 数据和表结构如下内连接内连接查询的是两张表的并集 也就是 A 表和 B 表都必须有数据才能查询出来 以下三个查询的结果是一样的 针对上面的表数据 能查询出 id 为 1 2 3 的数据

    2026年3月26日
    3
  • js获取当前日期与时间_js获取只有年月日的日期

    js获取当前日期与时间_js获取只有年月日的日期vardate=newDate();date.getYear();//获取当前年份(2位)date.getFullYear();//获取完整的年份(4位)date.getMonth();//获取当前月份(0-11,0代表1月)date.getDate();//获取当前日(1-31)date.getDay();//获取当前星期X(0-6,0代表星期天)date.getTime();//获取当前时间(从1970.1.1开始的毫秒数)date.getH

    2026年2月23日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号