RegEx验证SMS文本

时间:2011-03-03 16:22:11

标签: regex validation sms

如何编写RegEx来验证SMS文本只是键盘字符(abc,ABC,123,〜!@#$%^& *()`[] {} |;':',。/&lt ;>?)谢谢......

4 个答案:

答案 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ÆæßÉ!\#$%&amp;()*+,\\./\-:;&lt;=&gt;?¡ÄÖÑܧ¿äöñüà^{}\\\\\\[~\\]|\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);
}