7

次の値を取るフォームのフィールドがあります: -1、2-10、99

回答 2 ~ 10 に関係するビジネス ルールがあります。

2-10 には一致するが99 には一致しない正規表現を書こうとしていますが、問題が発生しています。

元の表現:

^2|3|4|5|6|7|8|9|10$

99 が一致するため失敗します (技術的には 2 回)。また、Line の境界は、私がこれまで慣れていなかったものです。Expresso では、他の場所 (.net など) とは異なる動作を観察します。この特定の例では、正規表現はjavascriptで実行されています。とにかく、expressoはそれらを無視しているようです(そして、値を括弧に入れた場合:

^[2|3|4|5|6|7|8|9|10]$

^[2-9]$

「すべてスペルアウト」または範囲として、開始行/文字列終了行/文字列の文字を指定した場合、expressoは一致を返しません(はい、2番目のケースで10を個別に一致させようとしていました)。

分かってる。問題を解決するために正規表現を使用する場合、2 つの問題があります (そして、おそらく、1 番目と 2 番目のスタイルで友人を招待し始めるでしょう)。ここでは使用する必要はありませんケースステートメントに切り替えることができます。しかし、ここで正規表現を使用できるはずであり、それを行うのは合理的なことのようです。正規表現に関しては、私はまだかなり緑色です。

4

6 に答える 6

46

これは明らかに、正規表現ではなく数値評価を使用すべきケースです。

var num = parseInt(aNumber, 10);
if (num >= 2 && num <= 10) {
    alert("Match found!");
}
于 2009-02-09T16:28:49.510 に答える
20

そのためには括弧が必要です。さらに範囲を使用して、読みやすくします。

^([2-9]|10)$
于 2009-02-09T16:33:39.810 に答える
7

連結は代替よりも優先されるため、代替を括弧で囲みます。

^(2|3|4|5|6|7|8|9|10)$
于 2009-02-09T16:21:11.697 に答える
1

2 から 9 または 10 のいずれかに一致する完全な JavaScript 関数

<script type="text/javascript">
    function validateValue( theValue )
    {
        if( theValue.match( /^([2-9]{1}|10)$/ ) )
        {
            window.alert( 'Valid' );
        }
        else
        {
            window.alert( 'invalid' );
        }
        return false;
    }
</script>

正規表現は簡単に拡張して、すべてのルールを組み込むことができます。

/^(-1|[2-9]|10|99)$/ // will match -1, 2-10, 99

編集:独自の真/偽の状況ロジックに置き換える必要があることを忘れていました。edit2: 欠けていた括弧を 2 番目の正規表現に追加しました。

于 2009-02-09T17:07:21.900 に答える
0

このオンライン ユーティリティは、数値範囲の re を生成するのに非常に優れています: http://utilitymill.com/utility/Regex_For_Range。2 から 10 までの範囲では、次の式が得られます\b0*([2-9]|10)\b。先頭の 0 を省略したい場合は、「0*」の部分を削除します。

于 2010-08-30T14:52:53.877 に答える
0

元の式が失敗する理由は、^2、3、4、5、6、7、8、9、10$ に一致しているためです。

この正規表現を試してください: ^(2|3|4|5|6|7|8|9|10)$

于 2009-02-09T16:21:50.713 に答える