請(qǐng)定義非法字符。或者說,合法字符都有哪些?比如,%,_這類特殊字符算不算非法字符?
在臨湘等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需定制開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),全網(wǎng)營(yíng)銷推廣,外貿(mào)網(wǎng)站建設(shè),臨湘網(wǎng)站建設(shè)費(fèi)用合理。
字符不同,處理方式也不同,所以需要先明確定義合法字符的范圍。
大致的思路是,做一個(gè)函數(shù),輸入你原來的字符串,輸出清洗后的字符串(即原字符串刪除了空格及其它非法字符后剩下的部分),然后update users set user_name=clean_function(user_name);
數(shù)據(jù)庫
所有存在標(biāo)識(shí)符的地方,我都不會(huì)在表名稱、數(shù)據(jù)庫密碼里使用@, $, , *, `這樣的字符。最大的原因是這些字符在腳本中往往會(huì)產(chǎn)生歧義。比如在SQL*Plus中,“@”符號(hào)是用來在連接數(shù)據(jù)庫時(shí)定義一個(gè)TNSNAMES輸入的。在Shell腳本中,“$”符號(hào)表示在它后面的內(nèi)容代表一個(gè)變量名稱。如果這些特殊的字符用在了表名稱中,那么一個(gè)與這個(gè)表相關(guān)的Shell腳本功能有可能會(huì)受到影響,從而無法實(shí)現(xiàn)相應(yīng)的功能。除了以上舉的兩個(gè)例子,在使用Oracle數(shù)據(jù)庫時(shí)還有許多其他字符需要注意,而目前所有的版本都存在這樣的問題,因此Oracle DBA一定要謹(jǐn)記著一點(diǎn)。
用 regexp_like這個(gè)函數(shù)來解決,正則表達(dá)式為:[[:punct:]]+這個(gè)正則可以找出任何標(biāo)點(diǎn)符號(hào)。
查詢value中包含任何標(biāo)點(diǎn)符號(hào)的記錄如下:
select * from xxx where regexp_like(value,'[[:punct:]]+');
POSIX 正則表達(dá)式由標(biāo)準(zhǔn)的元字符(metacharacters)所構(gòu)成: '$' 匹配輸入字符串的結(jié)尾位置。如果設(shè)置了 RegExp 對(duì)象的 Multiline 屬性,則 $ 也匹配 '\n' 或 '\r'。 '?' 匹配前面的子表達(dá)式零次或一次。 '*' 匹配前面的子表達(dá)式零次或多次。