0

正規表現でフィールドを検証するために検証エンジンを使用しています。私は仕事をほぼ終えましたが、問題があります。次の正規表現を作成できません。

  1. 先頭と末尾のスペースは使用できません。
  2. 間に複数のスペースを入れることはできません (1 つのスペースを入れることができます)。

これを任意のフィールドに配置できるように、これらの条件に対してのみ正規表現が必要です。

4

3 に答える 3

2

すべての言語がある種のトリミング機能にアクセスできるときに、先頭または末尾にスペースを入れずにデータを入力するように誰かに要求するのは、かなり怠惰です (そして、本当に悪いユーザビリティです)。同様にダブル スペースの場合: に置き換えるだけ" "です" "

本当に正規表現でそれをしなければならない場合、これはうまくいくはずです:

/^\S+(?!.*\s\s).*\S$/

これは、有効な文字列には少なくとも 2 文字 (先頭の \S と末尾の \S) があることを前提としています。単一の文字列を許可する場合、これは機能します。

/^(?!\s.*)(?!.*\s\s).*\S$/

逆に、無効な入力に一致させようとしている場合は、これが機能します (つまり、この正規表現に一致するものは、文字列が有効でないことを意味します)。

/^\s|\s\s|\s$/

できない正当な理由がない限り、最後のオプションは、有効な入力を照合する場合でもおそらく最適です。つまり、次のようなものです。

var isValid = !value.match(/^\s|\s\s|\s$/); // instead of "var isInvalid = value.match(/^\s|\s\s|\s$/);"

これが望ましい理由は、誰かが理解するのがはるかに簡単であり、コードの可読性を常に優先する必要があるためです。

于 2013-01-23T11:12:53.180 に答える
0
var s = "test test  test ";

// Find multiple spaces
if(s.indexOf("  ") !== -1) {
    alert('Multiple spaces found');
}

// Find leading or trailing space
if (s.indexOf(" ", 0) === 0 || s.indexOf(" ", s.length-1) != -1) {
    alert("Leading or trailing space found");
}

このフィドルの例を参照してくださいhttp://jsfiddle.net/powtac/b5mHr/2/

于 2013-01-23T11:10:40.503 に答える
0
/^(?!\s)(?!.*\s{2})(?!.*\s$)/

入力に改行が含まれる場合を除き、これを行う必要があります。その場合は、[\s\S]代わりに を使用して.ください。

説明:

^           # Start of string
(?!\s)      # Assert that the first character isn't whitespace
(?!.*\s{2}) # Assert that there are no two consecutive whitespace characters
(?!.*\s$)   # Assert that the last character isn't whitespace
于 2013-01-23T11:12:35.430 に答える