2016-06-23 3 views
1

8桁の番号またはワイルドカード検索を検索するための検索ボックスを作成しています。末尾または先頭に1つのアスタリスクを付けることができます。8桁または1〜8桁とアスタリスクを一致させる

Valid results 
12345678 
87654321 
1112223* 
12* 
1345* 
*123456* 
*1234567 
*1*  

Invalid results 
1234567 
A 
12- 
[email protected] 
** 
**1234** 
&T(
* 
*1*2* 
89789A8 

これを解決するための正規表現を作成しようとしています。私は現在これを持っています:

しかし、それは8桁しか許されておらず、先頭または末尾に「*」文字はありません。どんな助けもありがとう。ありがとう。

答えて

3

あなたは8桁、または最初または最後にスターと1-7の数字、または最初と最後にスターと1-6桁必要が​​あります:あなたは、あなたの正規表現の風味を言及しなかった

"\d{8}|\d{1,7}\*|\*\d{1,7}|\*\d{1,6}\*" 

をしかし、あなたが{8}を使用して以来、私はそれが範囲を扱うことができると思います。それ以外の場合は、\d\d?\d?\d?\d?\d?のようなものが必要です。

あなたは

"^(\d{8}|\d{1,7}\*|\*\d{1,7}|\*\d{1,6}\*)$" 

オンラインテスター(ここではすべての一致を示すために、複数行とグローバルを使用して)を持っていると思われる場合に使用される言語に応じてアンカーと正規表現を呼び出すために使用されるオプションを、必要になる場合があります。 https://regex101.com/r/uQ1yY8/1

+0

感謝。ほんの少しのコメント。 [アスタリスク] 1 [アスタリスク]は有効である必要があります。 –

+0

これは '** 1234 **'と '* 1 * 2 * 'の両方を許可します。 – meatspace

+0

@ meatspace:他の答えにコメントするつもりでしたか?鉱山はどちらにも合わない。 – Charles

1

一つの可能​​な正規表現:

\d{8}|\*?(\d{1})+\* 

おそらくそれは(あなたのREエンジンに依存)末尾に "$" が必要になります。

更新日1:

良い点、私はそれを逃しました。より良いバージョン:

^\*?(\d{1})+\*?$ 

アップデート2:

^\*?(\d{1,7})\*$|^\*(\d{1,7})\*?$|^\d{8}$ 
+0

ありがとう!クイック質問。 [アスタリスク] 1234567はあなたに有効と表示されますか?上の有効な結果の#7。 –

+0

ありがとう、更新を見た。しかし1234567というマークは有効です。https://regex101.com/r/kE0lG6/1 –

+0

私のUPDATE2がテストケースに合格しました;) – devwebcl

関連する問題