web-dev-qa-db-ja.com

正規表現-前後のスペースなしで文字列に一致します

トリミングされていない入力文字列を拒否する式を作成します。

whitespaceを含むホワイトリストに登録されたシンボルのグループを用意します。ただし、最初または最後の1つの位置では使用できません。ただし、ホワイトリストに記載されている先頭の記号とトリミング記号の間で任意の量を使用できます。

次の式があります。

^[^\s][A-Za-z0-9\s]*[^\s]$

...しかし、いくつかの理由で機能しません。少なくとも、ホワイトリストに登録されていなくても、空白以外の記号の先頭と末尾の位置で一致します。さらに、式に一致しても、1文字のWordには一致しません。

ホワイトリストは、A-Z、a-z、0-9、空白です。

有効なケース:

Abc132 3sdfas // everything ok

無効なケース#1:

 asd dsadas // leading\trailing space is exist

無効なケース#2:

$das dsfds // not whitelisted symbol at the leading\trailing position

それでは、空白記号が先頭または末尾の記号でない場合、ホワイトリストに空白記号を追加するにはどうすればよいですか?

6
WildDev

ルックアラウンドを使用して、両端にスペースがないことを確認できます。

^(?! )[A-Za-z0-9 ]*(?<! )$

ライブデモ

ただし、環境がルックアラウンドをサポートしていない場合、ほとんどのエンジンで次の正規表現が機能します。

^[A-Za-z0-9]+(?: +[A-Za-z0-9]+)*$
10
revo

ルックアラウンドをサポートする正規表現エンジンによって異なります

^(?=[A-Za-z0-9])([A-Za-z0-9\s]*)(?<=[A-Za-z0-9])$

デモ

2
alpha bravo

^と$の間の角かっこで囲んでみてください。これは、開始と終了に別々に指定するのではなく、文字列全体を表すためです[^\s]

^([^\s][A-Za-z0-9\s]*[^\s])$
0
A. Lau