RegExp验证SMS文本
如何编写一个RegExp来验证SMS文本是否只有键盘字符(abc,abc,123,~!@$%^&*()`[]{}}$':',./?)RegExp验证SMS文本,regex,validation,sms,Regex,Validation,Sms,如何编写一个RegExp来验证SMS文本是否只有键盘字符(abc,abc,123,~!@$%^&*()`[]{}}$':',./?) 谢谢…我建议手动操作 您只需处理一些异常,如[](需要转义)反引号和引号,具体取决于您所使用的语言(因为它可以结束模式的字符串) ^[a-zA-Z0-9~!@$%^&*()`\[\]{};':,./?\]*$ 也许需要稍微调整一下。我很确定-和u在SMS文本中是可以接受的。默认的GSM字符集是在中定义的。假设您查看的是解码文本,而不是真正使用的7位压缩格式,下面
谢谢…我建议手动操作 您只需处理一些异常,如
[
](需要转义)反引号和引号,具体取决于您所使用的语言(因为它可以结束模式的字符串)
^[a-zA-Z0-9~!@$%^&*()`\[\]{};':,./?\]*$
也许需要稍微调整一下。我很确定-和u在SMS文本中是可以接受的。默认的GSM字符集是在中定义的。假设您查看的是解码文本,而不是真正使用的7位压缩格式,下面这样的正则表达式应该将您限制为允许的字符
"@£$¥èéùìòÇ\fØø\nÅåΔ_ΦΓΛΩΠΨΣΘΞÆæßÉ !\"#¤%&'()*+,-./[0-9]:;<=>\?¡[A-Z]ÄÖÑܧ¿[a-z]äöñüà\^\{\}\[~\]\|€"
“@$$èèèèèèèèèèèèèèèèèèèèèèèèèèèèè?“[A-Z]
请注意,虽然可以发送unicode UCS-2消息,此时接收消息的手机必须具有适当的标志符号以向用户显示,但unicode本身并不是一个限制因素。我搜索了很多,但我认为最好的是
function CharecterControl(input) {
var str = /[^A-Za-z0-9 \\r\\n@£$¥èéùìòÇØøÅå\u0394_\u03A6\u0393\u0027\u0022\u039B\u03A9\u03A0\u03A8\u03A3\u0398\u039EÆæßÉ!\#$%&()*+,\\./\-:;<=>?¡ÄÖÑܧ¿äöñüà^{}\\\\\\[~\\]|\u20AC]*/;
return !new RegExp(str).test(input);
}
我知道我参加聚会有点晚了,但我一直在为此而斗争。我最近遇到了Twitter的开源项目: 它提供了一种在基于字符集发送字符串之前清理字符串的好方法。它还支持基于SMS友好字符集将字符串编码为字节。下面是我的示例,在使用其库通过SMS发送之前清理现有字符串:
public static String cleanSMS(String msg) {
Charset charset = CharsetUtil.map(CharsetUtil.NAME_GSM7);
StringBuilder cleaned = new StringBuilder(msg);
log.info("Accent chars replaced: " + MobileTextUtil.replaceAccentedChars(cleaned));
log.info("Safe chars replaced: " + MobileTextUtil.replaceSafeUnicodeChars(cleaned));
return CharsetUtil.normalize(cleaned.toString(), charset);
}
在评论和回答的时候有运气吗?在这个regex中,似乎反斜线已经逃过太多次了。在这个regex中,似乎反斜线已经逃过太多次了。正确的人不应该是<代码>[A-A-A-Za-z0-z0-9-9\r\n\r\n\r\n(n)如果不是<代码>
isGsmEncoded
-或者相反(如果您想测试非GSM字符,只需删除!
),它可以被称为hasUcs2Characters
。工作起来很有魅力,尽管我不得不在开始和结束时添加[and],并测试它的pr字符。
public static String cleanSMS(String msg) {
Charset charset = CharsetUtil.map(CharsetUtil.NAME_GSM7);
StringBuilder cleaned = new StringBuilder(msg);
log.info("Accent chars replaced: " + MobileTextUtil.replaceAccentedChars(cleaned));
log.info("Safe chars replaced: " + MobileTextUtil.replaceSafeUnicodeChars(cleaned));
return CharsetUtil.normalize(cleaned.toString(), charset);
}