有如下正則表達(dá)式:
成都創(chuàng)新互聯(lián)是專業(yè)的龍口網(wǎng)站建設(shè)公司,龍口接單;提供成都做網(wǎng)站、網(wǎng)站設(shè)計(jì),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行龍口網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
強(qiáng)密碼(必須包含大小寫字母和數(shù)字的組合,不能使用特殊字符,長度在 8-10 之間): ^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,10}$
使用如上正則表達(dá)式驗(yàn)證的時(shí)候發(fā)現(xiàn)沒有達(dá)到自己想要的效果,那是因?yàn)樯厦娴?\d 會被當(dāng)成轉(zhuǎn)義字符來對待,XCode警告 Unknown escape sequence '\d' ,如下:
最后po如上字符串的時(shí)候發(fā)現(xiàn)po出來的是 ^(?=.*d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,10}$ ,少了 \ 正因?yàn)槿绱?,所以正則的校驗(yàn)就不成功了。
解決辦法,就是在 \d 前面再加個(gè) \ ,不讓他轉(zhuǎn)義,如下:
這樣正則的校驗(yàn)就正確了。
1 漢字或者一般的轉(zhuǎn)特殊字符轉(zhuǎn)義問題, 可以直接用:
2 我在開發(fā)中還遇到 這些字符( ! * ' ( ) ; :@ = ?+ $ , / ? % # [ ] )不能正常轉(zhuǎn)化 .就會造成訪問地址鏈接包含非法字符問題
解決辦法:
在本類中新增一個(gè)下面的方法, 轉(zhuǎn)義的時(shí)候調(diào)用這個(gè)方法來轉(zhuǎn)義, 就解決了
這個(gè)方法的目的就是 對這寫不能正常轉(zhuǎn)義的字符,進(jìn)行判斷, 并加以正確的轉(zhuǎn)義操作!
轉(zhuǎn)義字符是一種特殊的字符常量。轉(zhuǎn)義字符以反斜線"\"開頭,后跟一個(gè)或幾個(gè)字符。轉(zhuǎn)義字符具有特定的含義,不同于字符原有的意義,故稱“轉(zhuǎn)義”字符。例如,在前面各例題printf函數(shù)的格式串中用到的“\n”就是一個(gè)轉(zhuǎn)義字符,其意義是“回車換行”。轉(zhuǎn)義字符主要用來表示那些用一般字符不便于表示的控制代碼。
常用的轉(zhuǎn)義字符及其含義
轉(zhuǎn)義字符 轉(zhuǎn)義字符的意義
\n 回車換行
\t 橫向跳到下一制表位置
\v 豎向跳格
\b 退格
\r 回車
\f 走紙換頁
\\ 反斜線符"\"
\' 單引號符
\a 鳴鈴
\ddd 1~3位八進(jìn)制數(shù)所代表的字符
\xhh 1~2位十六進(jìn)制數(shù)所代表的字符
廣義地講,C語言字符集中的任何一個(gè)字符均可用轉(zhuǎn)義字符來表示。表2.2中的\ddd和\xhh正是為此而提出的。ddd和hh分別為八進(jìn)制和十六進(jìn)制的ASCII代碼。如\101表示字?quot;A" ,\102表示字母"B",\134表示反斜線,\XOA表示換行等.
..\沒這樣轉(zhuǎn)義的。。
根目錄是:/;
..的意思是父目錄,
比如/a/b下有文件b.asp,那么b.asp中的../a.gif直接調(diào)用文件夾a中的a.gif
也可以用/a.gif
json作為ajax常用的一種數(shù)據(jù)類型,經(jīng)常使用。但如果字段中出現(xiàn)換行符如何處理?
去掉顯然不合適。有些字段本來就有換行符,如何能去掉?
測試一下json類的處理,也沒有發(fā)現(xiàn)。想不到最終的處理確實(shí)如此簡單:
后臺代碼把換行符\r\n替換為\\r\\n,前臺代碼js收到的字符就是\r\n
public static string ConvertFromListTojsonT(IListT list, int total, string columnInfos) where T : class
{
string[] cols = columnInfos.Split(new char[]{','},StringSplitOptions.RemoveEmptyEntries);
StringBuilder sb = new StringBuilder(300);
sb.Append("{\"total\":");
sb.Append(total);
sb.Append(",\"rows\":");
sb.Append("[");
foreach (T t in list)
{
sb.Append("{");
foreach (string col in cols)
{
string name = "\"{0}\":\"{1}\",";
string value = getValueT(t, col);
value = value.Replace("\r\n", "\\r\\n");
sb.Append(string.Format(name, col, value));
}
if (cols.Length 0)
{
int length = sb.Length;
sb.Remove(length - 1, 1);
}
sb.Append("},");
}
if (list.Count 0)
{
int length2 = sb.Length;
sb.Remove(length2 - 1, 1);
}
sb.Append("]");
sb.Append("}");
return sb.ToString();
}
private static string getValueT(T t, string pname) where T : class
{
Type type = t.GetType();
PropertyInfo pinfo = type.GetProperty(pname);
if (pinfo != null)
{
object v = pinfo.GetValue(t, null);
return v != null ? v.ToString() : "";
}
else
{
throw new Exception("不存在屬性" + pname);
}
}
\n是換行,英文是New line,表示使光標(biāo)到行首:在Windows 中表示換行且回到下一行的最開始位置。相當(dāng)于Mac OS 里的 \r 的效果。在Linux、unix 中只表示換行,但不會回到下一行的開始位置。
\r是回車,英文是Carriage return,表示使光標(biāo)下移一格:在Linux、unix 中表示返回到當(dāng)行的最開始位置。在Mac OS 中表示換行且返回到下一行的最開始位置,相當(dāng)于Windows 里的 \n 的效果。
具體例子如下:
Eclipse里運(yùn)行結(jié)果如下:
擴(kuò)展資料:
使用轉(zhuǎn)義字符時(shí)需要注意以下問題:
一、轉(zhuǎn)義字符中只能使用小寫字母,每個(gè)轉(zhuǎn)義字符只能看作一個(gè)字符。
二、\v垂直制表和\f換頁符對屏幕沒有任何影響,但會影響打印機(jī)執(zhí)行響應(yīng)操作。
三、在C程序中,使用不可打印字符時(shí),通常用轉(zhuǎn)義字符表示。
四、轉(zhuǎn)義字符’\0’表示空字符NULL,它的值是0。而字符'0'的ASCII碼值是48。因此,空字符’\0’不是字符0。另外,空字符不等于空格字符,空格字符的ASCII碼值為32而不是0。編程序時(shí),讀者應(yīng)當(dāng)區(qū)別清楚。
五、 如果反斜線之后的字符和它不構(gòu)成轉(zhuǎn)義字符,則’\’不起轉(zhuǎn)義作用將被忽略。
六、轉(zhuǎn)義字符也可以出現(xiàn)在字符串中,但只作為一個(gè)字符看待。
前言:根據(jù)需求,我將一個(gè)數(shù)組類型(每一個(gè)數(shù)據(jù)都是字典類型)的數(shù)據(jù)轉(zhuǎn)化為json字符串的形式傳給后臺。我在需要的地方再請求下來這個(gè)數(shù)據(jù)。結(jié)果發(fā)現(xiàn)請求下來的數(shù)據(jù)被轉(zhuǎn)義處理了,引號被轉(zhuǎn)義成"。
1.傳給后臺的json字符串。
NSMutableArray *conArr = [[NSMutableArray alloc] initWithCapacity:0];
for (DynmaticModel*model in self .dataArray)
{
? ? if (model.content model.content.length0) {
? ? ? ? NSDictionary*dic =@{@"type":model.type,@"content":model.content};
? ? ? ? [conArraddObject:dic];
? ? }
}
NSData *priceDta = [NSJSONSerialization dataWithJSONObject:conArr options:kNilOptions error: nil ];
NSString *priceJson = [[NSString alloc] initWithData:priceDta? encoding:NSUTF8StringEncoding];
傳給后臺的priceJson字符串打印如下:
priceJson = [{"type":"1","content":"啦啦啦1"},{"type":"2","content":""},{"type":"1","content":"啦啦啦2"}]
2.上傳成功后從后臺請求下來的字符串如下:
[{"type":"1","content":"啦啦啦1"},{"type":"2","content":"http:\/\/fengwojiancai.oss-cn-beijing.aliyuncs.com\/ios\/20200908151508\/2020090815150802.png"},{"type":"1","content":"啦啦啦2"}]
3.如何處理:
(1)將字符串中的"用引號替換
NSString *str = [ text stringByReplacingOccurrencesOfString:@""" withString:@"\""];
這個(gè)str就是你傳上去的json字符串。
(2)將json轉(zhuǎn)化為數(shù)組
NSData *JSONData = [str dataUsingEncoding:NSUTF8StringEncoding];
? NSError*error = nil ;
? ? NSArray * arr = [NSJSONSerialization JSONObjectWithData:JSONData options:NSJSONReadingAllowFragments error:error];
? ? for (NSDictionary *dic?? in?? arr) {
? ? ? ? NSLog(@"dic = %@",dic);
? ? }
這樣就ok了!