在對輸入字元進行正則校驗的時候,一般是進行輸入字元的型別匹配和長度匹配。型別匹配是通用的,但是長度匹配則有區別,主要是看傳輸的資料是以什麼格式進行傳輸的。
在utf-8中,英文是乙個位元組,普通中文是三個位元組,也有四個位元組的。不同的文字有不同的儲存位數,一共是1-6個位元組。
在utf-16中,英文和中文包括其他語言的字元都是2個位元組儲存的。
但是一般在實際顯示時,我們需要認定英文(半形)字元為乙個位元組,其餘所有字元為2個位元組。
本章只解析utf-8格式的字串,並達到某正則匹配限制。
進行兩步迴圈校驗,先進行字元型別校驗,在保證字元型別全部符合的情況下再進行字元個數校驗。
1.型別校驗,將不符合的資料型別從最後乙個開始刪。直至符合資料型別或者為空字元
while((!regex_match(para.c_str(),regex("[\\x00-\\x7f]*"))) & (!para.empty())) //任意數量的半形字元
2.進行字串長度校驗
2.1先將字串解析成vectoroutput的格式,計算得到字元數的總數量
參考**
using namespace std;
int num_1 = 0; //英文本元的數量
int num_2 = 0; //其餘字元的數量(包括中文,日文,各種外文)
int num_all = 0; //以英文本元乙個位元組,其餘字元2個位元組計算的數量
string input = "12字元3"
vectoroutput;
string ch;
for (size_t i = 0, len = 0; i != input.length(); i += len)
else if (byte >= 0xf8)
else if (byte >= 0xf0)
else if (byte >= 0xe0)
else if (byte >= 0xc0)
else
ch = input.substr(i, len);
output.insert(ch);
num_all = num_1 + num_2 * 2;
}
2.2 判斷得到的num_all是否符合
while(num_all > 16)
}
3.最後將ouput再解析成字串
for(int i=0;i
UTF8格式簡介
utf是unicode傳輸格式,有utf8,utf16,utf32等。這裡介紹utf8。utf8分成單位元組 雙位元組 三位元組 四位元組模式。具體如下 0 x 7bit 相容ascii碼 110 xx 10 11bit 1110 x 10 10 16bit 漢字所在 11110 10 10 10 ...
vs除錯正確顯示utf8格式字串
預設的,vc偵錯程式只能正常顯示ansi字串及unicode字串,而utf 8字串及其他格式則無法顯示。這裡無需編寫外掛程式及修改配置檔案,只需要將要顯示的字串拉到watch中,並在變數後面新增,s8即可顯示。這個功能隸屬於visual studio偵錯程式中的格式說明符。可以在這個頁面檢視完整的格...
流式校驗UTF8格式
由於某個工程需要校驗資料是否是utf8格式的,然後翻了翻rfc,確實挺簡單的編碼格式,所以直接寫了,但是越寫越感覺不對,位元組不夠時真的需要cache嗎?想肯定還有非常簡單的方法,果不其然,找到了這篇 流式校驗 utf8 原始碼 static unsigned char types static u...