如何编写RegEx来验证SMS文本只是键盘字符(abc,ABC,123,〜!@#$%^& *()`[] {} |;':',。/&lt ;>?)谢谢......
答案 0 :(得分:8)
默认的GSM字符集在GSM 03.38中定义。假设您正在查看已解码的文本,而不是真正使用的7位打包格式,如下所示的正则表达式应该限制您允许的字符
"@£$¥èéùìòÇ\fØø\nÅåΔ_ΦΓΛΩΠΨΣΘΞÆæßÉ !\"#¤%&'()*+,-./[0-9]:;<=>\?¡[A-Z]ÄÖÑܧ¿[a-z]äöñüà\^\{\}\[~\]\|€"
请注意,虽然可以发送unicode UCS-2消息,但此时接收消息的手机必须具有合适的字形以便呈现给用户,unicode本身不是限制因素。
答案 1 :(得分:4)
我建议手动完成。
你只需要处理一些例外情况,例如[
]
(需要转义)反引号和引号,具体取决于你所写的语言(因为它结束了字符串图案)
^[a-zA-Z0-9~!@#$%^&*()`\[\]{};':,./<>?| ]*$
也许需要一点调整。我很确定 - 和_在短信文本中被接受。
答案 2 :(得分:1)
我搜索了很多,但我认为最好的是。
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);
}
答案 3 :(得分:1)
我知道我参加聚会的时间有点晚了,但我一直在为此而战。我最近遇到了Twitter的开源项目:
https://github.com/twitter/cloudhopper-commons-charset
它提供了一种很好的方法来清除字符串,然后根据字符集发送它们。它还支持基于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);
}