2011-03-03 54 views
3

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

谢谢...

+0

任何运气与评论和答案? – 2011-03-08 22:28:46

回答

8

默认的GSM字符集在GSM 03.38中定义。假设你正在寻找解码文本,而不是7位压缩格式是真正使用,就像一个正则表达式下面应该限制你允许的字符

"@£$¥èéùìòÇ\fØø\nÅåΔ_ΦΓΛΩΠΨΣΘΞÆæßÉ !\"#¤%&'()*+,-./[0-9]:;<=>\?¡[A-Z]ÄÖÑܧ¿[a-z]äöñüà\^\{\}\[~\]\|€" 

不过,请注意,可以发送的Unicode UCS-2消息,此时接收消息的手机必须具有合适的字形以呈现给用户,但unicode本身不是限制因素。

+0

如何让它也可以在php命令preg_match上运行? – Gaucho 2015-06-25 12:15:11

+0

工作就像一个魅力,虽然我不得不在开始和结束时添加[和]并测试它的pr字符。 – runholen 2016-10-14 11:04:48

4

我建议做手工。

你一定要采取像[](需要转义)反引号取决于你与写作(因为它coud结束模式的字符串)

^[[email protected]#$%^&*()`\[\]{};':,./<>?| ]*$ 
语言的引用一些例外的护理

也许这需要稍微调整。我很确定 - 和_在短信文本中被接受。

1

我搜索了很多,但我认为最好的一个是。

function CharecterControl(input) { 
    var str = /[^A-Za-z0-9 \\r\\[email protected]£$¥èéùìòÇØøÅå\u0394_\u03A6\u0393\u0027\u0022\u039B\u03A9\u03A0\u03A8\u03A3\u0398\u039EÆæßÉ!\#$%&amp;()*+,\\./\-:;&lt;=&gt;?¡ÄÖÑܧ¿äöñüà^{}\\\\\\[~\\]|\u20AC]*/; 
    return !new RegExp(str).test(input);  
} 
+0

如何让它在php命令preg_match上也能正常工作? – Gaucho 2015-06-25 12:23:45

+0

似乎在这个正则表达式中反斜杠已经逃脱了太多次。是不是正确的一个是'[^ A-Za-z0-9 \ r \ n @£$¥èéùìòÇØøØØ\ u0394_ \ u03A6 \ u0393 \ u0027 \ u0022 \ u039B \ u03A9 \ u03A0 \ u03A8 \ u03A3 \ u0398 \u039EÆæßÉ !\#$%&()* +,\ ./ \ - :; <=>?¡ÖÑܧ¿äöñüà^ {} \\\ [〜\] | \ u20AC]'? – zVictor 2015-09-24 09:39:25

0

我知道我对派对有点迟到,但是我一直在为此而战。最近,我跑过Twitter的开源项目:

https://github.com/twitter/cloudhopper-commons-charset

它提供了基于字符集发送之前清理字符串的好方法。它还支持基于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); 
}