2016-09-07 13 views
0

我在數據庫中有一列phone_number,該條目可能包含多個電話號碼。該計劃是識別不通過正則表達式驗證的條目。從正則表達式得到錯誤「重複運算符操作數無效」(錯誤#1139)

這是我使用來完成我的目標查詢:

SELECT id, phone_number FROM store WHERE phone_number NOT REGEXP '^\s*\(?(020[78]?\)? ?[1-9][0-9]{2,3} ?[0-9]{4})|(0[1-8][0-9]{3}\)? ?[1-9][0-9]{2} ?[0-9]{3})\s*$'; 

問題是,我每次運行該代碼時,我得到一個錯誤:

Error Code: 1139. Got error 'repetition-operator operand invalid' from regexp

在此先感謝。

+0

結束你能否提供一些例子嗎?看來你可以試試這個:'^ [[:space:]] * \\(?(020 [78]?\\)??[1-9] [0-9] {2,3}?[ 0-9] {4} | 0 [1-8] [0-9] {3} \\)? ?[1-9] [0-9] {2}?[0-9] {3})[[:space:]] * $' –

回答

0

正則表達式使用的是具有至少2個問題:1)的逃逸應加倍,和2)有與|分離2組,使^$施加到兩個分支分別。

'^\s*\(?(020[78]?\)? ?[1-9][0-9]{2,3} ?[0-9]{4})|(0[1-8][0-9]{3}\)? ?[1-9][0-9]{2} ?[0-9]{3})\s*$' 
     ^--------------------------------------^ ^------------------------------------------^ 

您可以使用

'^[[:space:]]*\\(?(020[78]?\\)? ?[1-9][0-9]{2,3} ?[0-9]{4}|0[1-8][0-9]{3}\\)? ?[1-9][0-9]{2} ?[0-9]{3})[[:space:]]*$' 

擊穿:

  • ^ - 串
  • 開始
  • [[:space:]]* - 0+空格
  • \\(? - 1或0 (字符
  • (020[78]?\\)? ?[1-9][0-9]{2,3} ?[0-9]{4}|0[1-8][0-9]{3}\\)? ?[1-9][0-9]{2} ?[0-9]{3}) - 交替組匹配2個備選方案:
    • 020[78]?\\)? ?[1-9][0-9]{2,3} ?[0-9]{4} - 020 +可選78 +可選) +可選的空間+從19 + 3或2位的數字+可選的空間+ 4位數字
    • | - 或
    • 0[1-8][0-9]{3}\\)? ?[1-9][0-9]{2} ?[0-9]{3} - 0 +一個從18 + 3位數字+可選) +的optiona位升空間+從19 + 2位的數字+一個可選的空間+ 3個位數
  • [[:space:]]* - 0+空格
  • $ - 串
+0

您的工作方式如何?如果不是,請提供更多測試用例。 –

相關問題