作者chan15 (ChaN)
看板PHP
標題[請益] 正規式苦手請益
時間Thu Dec 28 18:27:25 2017
請教各位怎麼比對一個字串只能符合數字、英文、底現、橫線、冒號,但結尾不能是冒號的寫法呢
目前最接近的寫法如下
$strings = [
'aaa:bbb-cool',
'aaa-22-bbb_cool3',
'aaa:bbb-cool:',
'aaa_bbb-cool:',
'aaa_bbb-cool',
'bbbb:>dd',
'hihi%',
'大家好',
'0000000000',
'11111:2222:3333',
'11111:2222:3333:',
'DDD@@@1',
'大家好',
];
$pattern = '/[0-9a-zA-Z]+$/i';
foreach ($strings as $string) {
var_dump($string.' is '.preg_match($pattern, $string));
}
不過不知道為什麼 DDD@@@1 跟 bbbb:>dd 也符合
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.124.224.43
※ 文章網址: https://webptt.com/m.aspx?n=bbs/PHP/M.1514456847.A.7D5.html
1F:→ MOONRAKER: 阿不就 ^[\w-:]+[\w-]$ 12/28 18:51
2F:→ chan15: 這好像差有點多 XD 12/28 19:56
3F:推 LPH66: 主要觀念是你要分開描述的東西就分開寫 12/28 23:39
4F:→ LPH66: 至於 \w 就只是 [0-9A-Za-z_] 的簡寫而已 12/28 23:39
5F:→ MOONRAKER: 阿你是跑過了沒 跑過完全符合才會貼上來 12/29 15:33
6F:→ MOONRAKER: regex一撇都沒有就覺得可以用眼睛看 也是奇葩 12/29 15:34
不好意思,我會說差有點多是因為我的命題是「尾部不能是冒號」
當然你的作法就上面我亂打的測試資料來講這段跑過去都會正確
所以我並沒有說你「做錯」,但我想學的是尾部不能是 xx 的觀念跟作法
7F:推 xdraculax: 一樓正解,原PO的才是差有點多... 除非題目敘述有錯 12/31 12:07
我一開始是差很多,因為我一直往尾巴不能是 xx 這塊鑽
8F:推 vi000246: ^[\w_\-:]+(?<!:)$ 01/02 09:54
我後來去爬文也是用你這個寫法 /^[\w:-]+(?<!:)$/,只是我並沒有很明白
(?<!:) 這個的意思,可以請教你一下嘛
9F:→ vi000246: 原來\w有底線了 沒注意到 01/02 09:58
※ 編輯: chan15 (122.116.234.173), 01/03/2018 21:31:39
10F:噓 MOONRAKER: 不好意思,(1)全部要符合\w:-(2)最後不要符合冒號 01/03 22:58
11F:→ MOONRAKER: 標準做法就是那樣 不需要用到regex其他複雜的功能 01/03 23:01
12F:→ MOONRAKER: 你那麼愛學look-ahead 到底知不知道[^]的功能 01/03 23:03
13F:→ MOONRAKER: 我認為你不知道 從你一開始寫的就看得出來 01/03 23:04
14F:→ MOONRAKER: 不過還不會跑就努力學飛到月球 那我也不應該阻止 顆 01/03 23:06
坦白說,我不知道你在不高興什麼,[^]是不含的意思這我清楚
我不知道你是不是試圖跟我講 /^[\w-:]+[^:]$/ 這個寫法
是的話這個不會過的 hihi% <- 這個就會是 true,也是因為這個 case
我才在擔心 [\w-]$ 會不會在某個我不確定的內容會 pass
我也知道 \w 代表什麼,只是我忘記我哪個組合的寫法這樣下中文會過
才改成 A-Za-z0-9,總之就是從我留言以後的那近兩小時內試了很多寫法
包括你的那種,其實我已經寫出來了,只是我還是在想怎麼達成最後不可以是冒號這件事
所以回來看到你的才說不是我要的,在今天回來看之前已經定調 /^[\w:-]+(?<!:)$/
但我承認還一知半解這個用法,如果有求知的欲望被你說成這樣,我也不知道該說什麼
還是感謝你熱心的回覆
※ 編輯: chan15 (122.116.234.173), 01/04/2018 03:04:22
15F:噓 xdraculax: 不懂就問,不要用嗆的激將法擠出知識,很糟的惡習 01/04 10:20
16F:→ xdraculax: 不要去評論你不懂的東西是對是錯,只是自曝其短 01/04 10:22
17F:→ xdraculax: 你的行為才是給網友為陌生人免費教學的熱誠潑冷水 01/04 10:25
不好意思,我真的不知道我哪邊嗆了....
※ 編輯: chan15 (59.124.224.43), 01/04/2018 11:21:23
18F:推 vi000246: ?<!的用法可以去google lookbehind 01/04 14:49
19F:→ chan15: 好的,感謝你 01/04 16:34
20F:噓 lucky1lk: 我直接跟你講 你PO錯版了... 還嗆人@@ 你看看你回啥話吧 01/06 11:20
21F:→ chan15: 到底哪裡嗆可以明講嗎,我是真的沒發現,有人回答我問題 01/08 16:46
22F:→ chan15: 我嗆人幹嘛,那句真的冒犯了提點我一下我願意致歉的 01/08 16:46
23F:推 tkdmaf: 一開始人家告訴你做法,你卻在講別人有沒有做錯,這是導 01/10 08:08
24F:→ tkdmaf: 火線 01/10 08:08
25F:→ tkdmaf: 然後你坦白說的那整段就是在嗆了 01/10 08:09
26F:→ tkdmaf: 我只能告訴你一件事:發問者是沒有資格講人權的 01/10 08:10
27F:推 tkdmaf: 這話聽起來不合理,但發問者同時也就是受教者,拋出什麼 01/10 08:11
28F:→ tkdmaf: 問題就只能把人的回答和意黨單全收,沒有資格囉唆。如果你 01/10 08:11
29F:→ tkdmaf: 硬要問為什麼,那是因為要學要知道的人是你,不是回答的人 01/10 08:11
30F:推 tkdmaf: 然後發問的人永遠都會忘記的事情是:當你拋出問題有人回 01/10 08:14
31F:→ tkdmaf: 應你答案,不管好或壞起碼人家願意理你,提點你。如果人家 01/10 08:14
32F:→ tkdmaf: 壓根就不想理你那你才真的慘了 01/10 08:14
發問者要對回答照單全收,沒有資格囉唆?這是這個版的風格還是你個人風格?
完全不能接受,我第一次聽到討論版是不能對答案有疑問的
我就是真心不知道為什麼他要用那樣的口氣回我我才反問我真的不知道他在氣什麼
但看到接著幾個人的發言,我覺得應該是我自己誤會這個地方了
※ 編輯: chan15 (59.124.224.43), 01/10/2018 16:42:30
33F:噓 kyleJ: 不要去評論你不懂的東西是對是錯+1 教別人最討厭遇到這種 01/10 17:03
34F:→ kyleJ: 的 自己沒去搞懂也至少要跑一次看看 都沒做就用想像力跟別 01/10 17:03
35F:→ kyleJ: 人揮 01/10 17:03
36F:→ kyleJ: 一樓的做法就已經符合你要的東西了 你在二樓卻跟別人說差 01/10 17:03
37F:→ kyleJ: 很多????就算你後來補充一堆話也只代表一開始原文敘述 01/10 17:03
38F:→ kyleJ: 很爛而已 你還是不該那樣回好心幫你的一樓 01/10 17:03
39F:噓 tkdmaf: 如果你是付費發問就算了,但你不是…… 01/10 18:21
40F:→ tkdmaf: 這種情形下還要要求別人態度如何如何我才真是醉了~~ 01/10 18:22
41F:→ tkdmaf: 有疑問你可以提,但沒資格質疑別人的「態度」 01/10 18:23
42F:→ tkdmaf: 除非你付相應價值的錢,那別人就會好聲好氣的回應你。 01/10 18:24
43F:→ tkdmaf: 多少人都不明白自己明明就是無償跟對方要求東西…… 01/10 18:25
44F:→ tkdmaf: 還在那以為別人對你的好該是理所當然??? 01/10 18:25
45F:→ vi000246: 一樓做法的問題是如果以後要擴充條件的話要寫兩次 01/11 23:24
46F:→ vi000246: 我覺得你問問題的技巧還要加強 01/11 23:24
48F:→ vi000246: 我會把範例程式碼 跟解題的思路、期望的結果寫出來 01/11 23:27
49F:→ vi000246: 像你是問符合範例的做法 當然板友就給你符合的表達式了 01/11 23:28
50F:噓 shinmeteor: 這年頭裝傻的人最厲害。給正解還在那邊五四三。你最厲 01/14 09:13
51F:→ shinmeteor: 害好不好。我也沒有嗆人唷。呵呵。奇文共賞。 01/14 09:13
52F:→ xxxzzz: 這邊老人的語氣就是這種格調,微帶點氣、微帶點酸.... 01/19 23:23
53F:→ xxxzzz: 你只要記得別戳破那種感覺 01/19 23:24
54F:→ xxxzzz: 你這邊真正的敗筆,是謙卑的想弄清楚老人為什麼莫名生氣 01/19 23:26
55F:→ xxxzzz: 因為戳破了....就會..大家都懂...老人面子要顧... 01/19 23:28
56F:→ xxxzzz: 原PO2樓用詞語氣表情符號,我初看的解讀就是原PO後來解釋的 01/19 23:44
57F:→ xxxzzz: 居然能惹怒這麼多人,讓我忍不住出來提點原PO 01/19 23:45
58F:→ xxxzzz: 求知慾望對原PO你能力很幫助(繼續保持) 01/19 23:47
59F:→ xxxzzz: 但要問更深入前,最好能去確定對方有此雅量 01/19 23:48
60F:→ xxxzzz: 真心想教人、不怕麻煩、不怕被問倒(互相漏氣求進步) 01/19 23:49
61F:→ xxxzzz: 如果有人叫你不管好壞都要照單全收的 01/19 23:51
62F:→ xxxzzz: 那個人是在害你,如果哪天倒楣學到錯誤的觀念呢? 01/19 23:52
63F:→ xxxzzz: 推文讓我想起,以前看到推文某人的應徵履歷,感覺怪怪略過 01/19 23:57
64F:→ xxxzzz: 幸好當時直接略過,果真省了點時間 01/19 23:59
65F:→ xxxzzz: 對了,以上不是說全部老人,有些老人是真的有心回覆解惑 01/20 00:01
66F:→ xxxzzz: 想這邊也是有幾個感覺是真的為了幫你解決問題的 01/20 00:02
67F:→ xxxzzz: 像這篇 01/20 00:03
68F:噓 tkdmaf: 誰才是真的在害人呢?誰才是真的在幫人呢? 01/20 12:06
69F:→ tkdmaf: 真正的敗筆,是把問題發洩到別人的態度上了。 01/20 12:07
70F:→ tkdmaf: 而不是持續追求問題的本質。 01/20 12:07
71F:→ tkdmaf: 能夠誤解「照單全收」的意思然後來一長串推文我也是醉了… 01/20 12:08
72F:→ tkdmaf: 而且還是在本板查無文章的人在說道理………一整個怪 01/20 12:09
73F:噓 shinmeteor: 有夠無聊。樓上幾位到底有啥好吵。好像小朋友一樣一定 01/20 13:47
74F:→ shinmeteor: 要吵到有個輸贏。 01/20 13:47
75F:噓 tkdmaf: 樓上息怒XD…… 01/20 14:08
76F:→ tkdmaf: 雖然我蠻好奇某x說的應徵履歷是誰的………(當然不可能是我 01/20 14:12
77F:→ tkdmaf: 我最後一次應徵工作已經是2007年了 01/20 14:13
78F:→ gpmm: 我也覺得原 po 的表達讓人不太喜歡 XDDD 01/22 00:52
79F:→ tkdmaf: 那就請版主教大家如何完成一個正規表達……問題及說謝謝 01/22 03:14
80F:→ tkdmaf: 的方法XD 01/22 03:14