2017-09-02 7 views
2

私は以下のpreg_matchを持っています。preg_matchに例外を追加する方法

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

これは素晴らしいですが、私は/ Hや他の文字を持つミストリングがあります。また、-1、-15などの数字で終わることもあります。

Mystringsは、このW0DLKようWA0DLK、W0DLK-1、W0DLK-20を探すことができ、W0DLK/H、W0DLK/M

どのように私は後何も無視する私の既存するpreg_matchに追加します ' - ' ダッシュか'/'スラッシュ?最初に値を部分文字列にすることは、私の使用では難しいでしょう。

+0

有効な値は次のようになります。W0DLK、WA0DLK、W0DLK/H、W0DLK /ここでは任意の文字、W0DLK-15、またはダッシュの後に任意の数。 –

+0

あなたの最初のソリューション(下記)が最も効果的でした。ありがとうございました!! return 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]+)?$ 

これは、文字列は-と数字、または/と文字で終了することができます。

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

    問題が見つかりました。テストされる値には1つの数値しか存在できません。たとえば、W5DLK、WA5DLK、WA5DLK/Hなどです。数字の後には3文字以内で入力してください。 –

    +0

    元の正規表現では、2番目の正規表現を修正する必要があります。この権利を読んだら、 '\ d'の後に' + 'を' {1,3} 'に変更し、' [a-z] 'の後に' + 'を削除してください。 – chris85

    関連する問題