1

私は正規表現とJavascriptの完全な初心者です。次の問題があります。1つまたは複数(n)個の連続した*(アスタリスク)文字の存在をテキストフィールドにチェックインする必要があります。*または**または***または無限(n)*。許可される文字列。*tomatoまたはtomato*または**tomatoまたはtomato**またはとしてmany(n)*tomato many(n)*。これまで、私は次のことを試しました。

var str = 'a string'
var value = encodeURIComponent(str);
var reg = /([^\s]\*)|(\*[^\s])/;

if (reg.test(value) == true ) {
    alert ('Watch out your asterisks!!!')
}
4

2 に答える 2

2

あなたの質問では、あなたが何を求めているのかを解読するのは難しいです...しかし、私に試してみましょう:

最初または最後にアスタリスクのみを許可する

次のように、最初または最後(両側ではない)に任意の数(少なくとも1つ)のアスタリスクのみを許可する場合。

  • *****tomato
  • tomato******
  • だがしかし **tomato*****

次に、次の正規表現を使用します。

reg = /^(?:\*+[^*]+|[^*]+\*+)$/;

アスタリスクの前後の番号を一致させる

ビギニングのアスタリスクの数が最後のアスタリスクの数と一致する必要がある場合

  • *****tomato*****
  • *tomato*
  • だがしかし **tomato*****

次に、次の正規表現を使用します。

reg = /^(\*+)[^*]+\1$/;

結果?

これらの正規表現のそれぞれが一致した場合の結果はどうなるか、あなたの質問からは明らかではありませんか?上記の正規表現に対してテストで陽性または間違っている文字列は、あなたとあなたの要件にありますか。正しい正規表現があれば、必要な機能を提供できます。

また、文字列内のアスタリスクを除外するための正規表現も作成しました。スペースなども拒否する必要がある場合は[^...]、上記の式の部分を調整するだけです。

:どちらの正規表現もテストされていませんが、コードで実際に必要な正規表現の作成を開始する必要があります。

于 2012-07-30T11:40:14.793 に答える
0

私が正しく理解していれば、あなたはこのようなパターンを探しています:

var pattern = /\**[^\s*]+\**/;

これは、*****またはのような文字列とは一致しませんが、有効であると言うすべての例(など)** ***と一致します。誤解した場合はお知らせください。何がで​​きるかを確認します。PS:私たちは皆、ある時点で初心者として始めました。恥ずかしいことは何もありません。お詫びすることは言うまでもありません:)***d*** *d***tomatos

質問を編集した後、入力の最初または最後にアスタリスクを使用する必要がありますが、文字列には少なくとも1つの他の文字が含まれている必要があるため、次の解決策を提案します。

var pattern = /^\*+[^\s*]+|[^\s*]+\*+$/;
'****'.match(pattern);//false
' ***tomato**'.match(pattern);//true

ただし、*tomato*許可されていない場合は、正規表現を次のように変更する必要があります。

var pattern = /^\*+[^\s*]+$|^[^\s*]+\*+$/;

これは、正規表現の魔法の世界で自分の道を見つけるのに役立つ便利なサイトです

于 2012-07-30T11:30:08.663 に答える