2017-09-02 59 views
2

我有以下preg_match;如何添加一個例外preg_match

preg_match('=^\d?[a-z]{1,2}\d{1,4}[a-z]{1,3}$=i', $mystring); 

這很好,但我有一些有/ H或其他字符的mystrings。它們也可能以-1,或-15或其他數字結尾。

Mystrings可以這個樣子W0DLK,WA0DLK,W0DLK-1,W0DLK-20,W0DLK/H,W0DLK/M

如何將添加到現有的preg_match忽略後面的所有 ' - ' 破折號或'/'斜槓?首先對值進行分組將很難在我的使用中。

+0

有效值是這樣的:W0DLK,WA0DLK,W0DLK/H,W0DLK /這裏的任何信件,W0DLK-15,或破折號後的任何數字。 –

+0

你的第一個解決方案(如下)工作得最好。謝謝!!返回preg_match('=^\ d?[az] {1,2} \ d {1,4} [az] {1,3}(?:[ - /] [az \ d] +)?$ = i ',$ callsign); –

回答

0

您可以在表達式末尾使用可選的捕獲組,以便允許使用連字符/短劃線和字符。

^\d?[a-z]{1,2}\d{1,4}[a-z]{1,3}(?:[-/][a-z\d]+)?$ 

這允許一個或-/然後字母和/或數字。更嚴格的正則表達式是:

^\d?[a-z]{1,2}\d{1,4}[a-z]{1,3}(?:-\d+|/[a-z]+)?$ 

這使得該字符串與-和數字,或/和字母結束。

  1. https://regex101.com/r/6OxdZC/1/
  2. https://regex101.com/r/6OxdZC/2/
+0

哎呀!發現問題。被測值中只能有一個數字。例如W5DLK,WA5DLK,WA5DLK/H等,數字後不超過3個字符。 –

+0

根據您的原始正則表達式,第二個正則表達式應該能夠被修改以適應。把'\ d'後面的'+'改成'{1,3}'並在'[a-z]後面刪除'+'......如果我已經閱讀了這個權利。 – chris85

相關問題