2

I am in need of a regfex for a validation framework which accepts regex formats for validation. I cannot use arithmetic and comparative operators. I have come up with a solution but It is not working as expected. I want to know what’s wrong with the regex which I came up with and how to sort it out right

Regex for any number from 10429 to 40999

My solution:

^1042[9-9]|104[3-9][0-9]|10[5-9][0-9][0-9]|1[1-9][0-9][0-9][0-9][0-9]|[2-3][0-9][0-9][0-9][0-9]|40[0-9][0-9][0-9]

But this one is not working.

4

6 に答える 6

9

これを試して

^(10429|104[3-9][0-9]|10[5-9][0-9]{2}|1[1-9][0-9]{3}|[23][0-9]{4}|40[0-9]{3})$

パターン番号範囲の生成については、こちらをご覧ください


お役に立てれば。

于 2012-05-28T04:59:50.370 に答える
4
  1. 1[1-9][0-9][0-9][0-9][0-9]- 桁数が多すぎます。
  2. ^1|2|3実際には(?:^1)|2|3- あなたが必要^(?:10429|...|40[0-9][0-9][0-9])$です。
于 2012-05-28T04:59:43.103 に答える
0

10429|104[3-9][0-9]|10[5-9][0-9]{2}|1[1-9][0-9]{3}|[23][0-9]{4}|40[0-9]{3}トリックを行う必要があります。

なぜこれが必要なのかはわかりませんが...

于 2012-05-28T04:59:45.963 に答える
0

これを試して^(10429|104[3-9]\d|10[5-9]\d{2}|1[1-9]\d{3}|[2-3]\d{4}|40\d{3})$

于 2012-05-28T05:01:43.840 に答える
0

ここには非常に長い正規表現がいくつかあります。このタスクは、パターンに多くの冗長性を持たせることなく解決できます。正規表現以外に使用するものがない場合は、次のパターンが必要です。

^(([123][1-9]|[234]0)[0-9]{3}|10([5-9][0-9]{2}|4([3-9][0-9]|29)))$

ここでは、それが何を意味するかを示すために展開されています。

 ^                      #The beginning of the line. This ensures 10429 passes, but 9999910429 doesn't.
 (                      
   ([123][1-9]|[234]0)  #This lets the first two digits be anything from 11-40. We'll deal with 10xxx later on.
   [0-9]{3}             #If the first two digits are 11-40, then the last three can be anything from 000-999. 
 |                      
   10                   #Okay, we've covered 11000-40999. Now for 10429-10999.
   (
     [5-9][0-9]{2}      #Now we've covered 10500-10999; on to the 104xx range.
   |
     4                  
     (
        [3-9][0-9]      #Covers 10430-10499.
     |
        29              #Finally, the special case of 10429.
     )
   )                  
 )
 $                      #The end of the line. This ensures 10429 passes, but 104299999 doesn't.

数値が入力全体ではなく、文字列に埋め込まれている場合 (たとえば、文字列 "blah blah 11000 foo 39256 bar 22222" からすべての数値を取得したい場合は、との両方^を.$\b

Regexr での動作を確認してください: http://regexr.com?312p0

于 2012-05-29T13:20:00.860 に答える