2016-11-29 141 views
2

我試圖找到一個正則表達式來替換這樣的想法:正則表達式:忽略字符字符串比較

if($input === numbers_only($phone_number)) { 
    // do something 
} 

假設

$輸入將總是是數字

numbers_only()去除所有非數字字符

語境

在這一天我需要寫一個MySQL查詢,這是否對格式化爲文本的列這就是爲什麼我不能簡單地使用像上面的函數結束。所以它看起來像這樣:

SELECT 
    number 
FROM 
    phones 
WHERE 
    number REGEXP '...' 

這是正則表達式可以處理的東西嗎?

更新

我認爲更好的方式來短語這個問題(或另一種方式來它)可能是,如果有一種方法,在MySQL中CONVERT()方法可以處理的文本轉換(不VARCHAR)以INT進行比較。

+0

可能的重複[你如何從MySQL查詢中的字符串中提取數值?](http://stackoverflow.com/questions/978147/how-do-you-extract-a-numerical-value-從一個字符串在一個MySQL的查詢) – Bobot

+0

http://stackoverflow.com/questions/6604455/php-code-to-remove-everything-but-numbers,對不起,如果誤解。 – Progrock

+0

感謝@Progrock - 不幸的是,鏈接到preg_replace()這是PHP,最後,我需要這是MySQL – Verl

回答

1

將存儲在表中之前清理數據會更好。這樣,您就擁有了客戶端語言的全部功能,您可以執行諸如preg_replace('/[^0-9]+/', '', $num)(如果PHP)。也許你應該努力現在修復所有的數據?

但是,假設您在列中停留了垃圾,讓我們看看我們可以做些什麼。

看來你在談論電話號碼?只有少量可能存在的字符(可能是「 - ()」)?所以...

WHERE $num = REPLACE(...(REPLACE(number, '-', ''), '(', '')...) 

真的很凌亂。而且效率很低。

+0

感謝里克詹姆斯 - 我認爲這是最好的解決方案,除了簡單地咬住子彈並將列類型更改爲替代格式,以便我可以對其運行CAST()或CONVERT()函數(如果我正確理解這些功能)。感謝幫助! – Verl

+0

我不明白'CAST'或'CONVERT'會有什麼幫助,除非_all_數字在開頭。 –

+0

裏克詹姆斯 - 你說得對,我做了一些更多的測試,並且在第一個非數字字符之後,轉換/轉換似乎只是切斷了所有的文本。因此,假設我們希望完成清理當前數據的工作,那麼真正將其轉換爲INT(x)列看起來就是解決方案。你是否以同樣的方式看待它? – Verl

相關問題