2011-03-03 98 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); 
}