アイルランドのエールコード形式の検証のベストプラクティスがあるかどうか疑問に思っています。 JavaScriptでREGEXを使用するこれまでの私の最善の試みは、11ページにある公式仕様ここに基づいた次のとおりです。
(ドキュメントのページ番号に基づく11ページ、または表紙を含める場合は12ページ)
/^[A,C,D,E,F,H,K,N,P,R,T,V,W,X,Y]{1}[0-9]{1}[0-9,W]{1}[\ \-]?[0-9,A,C,D,E,F,H,K,N,P,R,T,V,W,X,Y]{4}$/
ここでエールコード関連の質問が見つからなかったので、これを開いて他の人の考えを確認し、誰もが思いつくことができるより良い/より短い/より効率的なパターンを確認したいと思いました。
編集:@Asunezの回答に従ってコンマを削除しました。
/^[ACDEFHKNPRTVWXY]{1}[0-9]{1}[0-9W]{1}[\ \-]?[0-9ACDEFHKNPRTVWXY]{4}$/
@Manwalの答えは正確に正しいことをしていないので、OPの正規表現を短くする私の試みは次のとおりです。
(?:^[AC-FHKNPRTV-Y][0-9]{2}|D6W)[ -]?[0-9AC-FHKNPRTV-Y]{4}$
これは基本的に正規表現ですが、いくつかの変更があります。
[]
括弧内の項目をリストするためにコンマは必要ありません。C-F
、V-Y
)。他の場所では、正規表現が短くならないため、範囲を追加することは有益ではありません。D6W
を後読みだけで処理することも可能ですが、これは正規表現というよりは芸術です。
正規表現のデモを参照してください: ここ
文字クラスをnotに反転して、指定された文字を含めることもできます。正規表現が短くなることはありませんが、注目に値します。ただし、他の文字(ドット、コンマなど)も含まれていないことを確認する必要があります。 \W
トークンを追加して行います。
あなたはそれを試すことができます ここ
製品ガイドの第1.5.4章によると、許可される標識は次のとおりです。
_-----------------------------------------------------------------------
| Component | Position | Allowed characters |
-----------------------------------------------------------------------
| Routing Keys | 1 | A,C,D,E,F,H,K,N,P,R,T,V,W,X,Y |
-----------------------------------------------------------------------
| Routing Keys | 2 | 0-9 |
-----------------------------------------------------------------------
| Routing Keys | 3 | 0-9 with the exception of W for D6W |
-----------------------------------------------------------------------
| Unique Identifier | 4 | 0-9, A,C,D,E,F,H,K,N,P,R,T,V,W,X,Y |
-----------------------------------------------------------------------
| Unique Identifier | 5 | 0-9, A,C,D,E,F,H,K,N,P,R,T,V,W,X,Y |
-----------------------------------------------------------------------
| Unique Identifier | 6 | 0-9, A,C,D,E,F,H,K,N,P,R,T,V,W,X,Y |
-----------------------------------------------------------------------
| Unique Identifier | 7 | 0-9, A,C,D,E,F,H,K,N,P,R,T,V,W,X,Y |
-----------------------------------------------------------------------
_
_D6W
_コードである1つの特定の状況を除いて、すべてのルーティングキーには文字と2桁の数字が含まれている必要があります。
したがって、_A5W
_、_C6W
_、_V0W
_で始まるコードは無効です。
章によると_1.5.1 Recommendations for Storage and Presentation
_
データベースに保存されているコードは、space
またはdash
で区切るのではなく、space
で区切る必要があり、表示するためだけに使用してください。
仮定すると、正しい正規表現は次のようになります。
/([AC-FHKNPRTV-Y]\d{2}|D6W)[0-9AC-FHKNPRTV-Y]{4}/
Char B
を避けてこの回答を更新しました。あなたはこれを試すことができます:
/^[AC-Y]{1}[0-9]{1}[0-9W]{1}[ \-]?[0-9AC-Y]{4}$/
説明:
^ assert position at start of the string
[AC-Y]{1} match a single character present in the list below
Quantifier: {1} Exactly 1 time (meaningless quantifier)
A the literal character A (case sensitive)
C-Y a single character in the range between C and Y (case sensitive)
[0-9]{1} match a single character present in the list below
Quantifier: {1} Exactly 1 time (meaningless quantifier)
0-9 a single character in the range between 0 and 9
[0-9W]{1} match a single character present in the list below
Quantifier: {1} Exactly 1 time (meaningless quantifier)
0-9 a single character in the range between 0 and 9
W the literal character W (case sensitive)
[ \-]? match a single character present in the list below
Quantifier: ? Between zero and one time, as many times as possible, giving back as needed [greedy]
the literal character
\- matches the character - literally
[0-9AC-Y]{4} match a single character present in the list below
Quantifier: {4} Exactly 4 times
0-9 a single character in the range between 0 and 9
A the literal character A (case sensitive)
C-Y a single character in the range between C and Y (case sensitive)
$ assert position at end of the string