RegExp验证SMS文本

RegExp验证SMS文本,regex,validation,sms,Regex,Validation,Sms,如何编写一个RegExp来验证SMS文本是否只有键盘字符(abc,abc,123,~!@$%^&*()`[]{}}$':',./?) 谢谢…我建议手动操作 您只需处理一些异常,如[](需要转义)反引号和引号,具体取决于您所使用的语言(因为它可以结束模式的字符串) ^[a-zA-Z0-9~!@$%^&*()`\[\]{};':,./?\]*$ 也许需要稍微调整一下。我很确定-和u在SMS文本中是可以接受的。默认的GSM字符集是在中定义的。假设您查看的是解码文本,而不是真正使用的7位压缩格式,下面

如何编写一个RegExp来验证SMS文本是否只有键盘字符(abc,abc,123,~!@$%^&*()`[]{}}$':',./?)


谢谢…

我建议手动操作

您只需处理一些异常,如
[
](需要转义)反引号和引号,具体取决于您所使用的语言(因为它可以结束模式的字符串)

^[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ÆæßÉ!\#$%&amp;()*+,\\./\-:;&lt;=&gt;?¡ÄÖÑܧ¿äöñüà^{}\\\\\\[~\\]|\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)如果不是<代码>?@zVictor是正确的-这是正确的字符串。此外,这个示例让我很失望-更好的函数名是
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);
}