0

基本的に、次のような正規表現がある場合

/^(foo|bars)$/

私はそれが成功することを望みます

['', 'f', 'fo', 'foo', 'b', 'ba', 'bar', 'bars']

しかし、その後のようなもので失敗します

['j', 'fa', 'foos'...]

頂いた回答の一部は承知しておりましたが、

/^(f(oo?)?|b(ar?)?)$/

また

/^f|fo|foo|b|ba|bar$/

そして、それらは機能しますが、この特定のケースでは、それは私がむしろ行きたい方法ではありません。これが 20 の長い単語に拡張されると、管理できなくなります。可能であれば、よりエレガントなソリューションが欲しいです。

エレガントなアイデアはありますか?私が使用している場所では、RegExではなく文字列のリストを渡し、入力のインデックスが文字列のいずれかで0であるかどうかを確認できますが、できる方法があるかどうかを確認したかっただけです正規表現でそれを行います。

すべての回答に感謝しますが、私はほとんどの場合、可能な限り「エレガントな」ソリューションを探していますが、調べてみると、解決策があるかどうかわかりません。

基本的には強制入力防止です。私が望んでいたのは、Dojo の ValidationTextBox ( http://dojotoolkit.org/reference-guide/1.7/dijit/form/ValidationTextBox.html ) に似たものでした。そこで、入力が検証パターンと一致しない場合はできるだけ早く通知します(私は...そうするかもしれません)が、正しい入力とそのパスのみを許可したいと思います.

言い換えると、入力文字列を同じ長さのパターンに対してのみチェックできるかどうかを確認するエレガントな方法があるかどうかを調べようとしていました。

/^(f|b)$/

この場合、2 つの文字、

/^(fo|ba)$/

等々。

私の具体的な答えは正規表現による代替に関するものですが、正規表現全般についてこれを知りたいです(私が読んだことから、それは可能ではないようです)。

つまり、もしあなたが持っていたら、

/^The dog$/

すべての人にとってテストが成功する方法が欲しい

['', 'T', 'Th',...'The dog']
4

4 に答える 4

0

どのような技術を使用していますか?

「エレガントな」技術的解決策は、手動で作成するのではなく、許可された入力文字列から正規表現パターンを生成するプログラムを作成することである可能性があるためです。

これが単一文字入力の対話型アプリケーションである場合、同様の戦略 (正規表現を作成するプログラムを作成する) がありますが、1 文字入力に対して 1 つの正規表現パターン、2 文字入力に対して 1 つ、3 文字に対して 1 つなどを生成します。入力の長さに基づいて選択されます。

固定文字列の場合、次のようなことをしたくなるでしょう:

for each string:
    if string has a character match at the nth position:
        retain string
    else:
        remove string from further consideration

これは補完もサポートします。つまり、一致する可能性のある文字列は 1 つしかないため、これ以上入力する必要がないことをユーザーに知らせます。

于 2012-04-12T22:36:17.407 に答える