記号を避け、文字と数字だけを許可する正規表現が必要です。この正規表現はうまく機能しますが、単語の間にスペースを入れることはできません。
^[a-zA-Z0-9_]*$
たとえば、この正規表現を使用している場合、 "HelloWorld"は問題ありませんが "Hello World"は一致しません。
スペースを許可するように調整するにはどうすればよいですか。
文字クラス にスペースを入れるだけです。
^[a-zA-Z0-9_ ]*$
上記は正しくありません。 *
はゼロ以上を意味するため、通常は一致するとは限らない、以下のすべての場合に一致します。
もともと私は、厳密さは問題ではないと思われるという基本的な質問をOPが求めていたので、そのような詳細が入る価値があるとは思いませんでした。質問が人気を博した今、私は言いたいです...
これは、私の好みでは(\w
を使用せずに)次のように解釈されます。
^[a-zA-Z0-9_]+( [a-zA-Z0-9_]+)*$
(@stemaを問わずに投票してください。)
この(そして@ stemaの)答えについて注意すべきことがいくつかあります。
単語間にmultipleスペースを許可したい場合(たとえば、偶然のダブルスペースを許可したい場合、またはPDFからコピーペーストしたテキストを使用している場合)、+
を追加します。スペースの後:
^\w+( +\w+)*$
タブと改行(空白文字)を許可したい場合は、スペースを\s+
に置き換えます。
^\w+(\s+\w+)*$
たとえば、Windowsの改行は2個の空白文字の連続+
で構成されているので、ここではデフォルトで\r\n
をお勧めします。そのため、両方をキャッチするには+
が必要です。
使用している正規表現の方言を確認してください。* Javaのような言語では、バックスラッシュ、すなわち\\w
および\\s
をエスケープする必要があります。 sed
、\w
、\s
のような、より古い、あるいはより基本的な言語やユーティリティでは定義されていないので、それらをそれぞれ文字クラス例[a-zA-Z0-9_]
、[\f\n\p\r\t]
で書き出してください。
* 私はこの質問が vb.net とタグ付けされていることを知っていますが、25,000以上のビューに基づいて、私はそれがこの質問に遭遇している人々だけではないと思います。現時点では、検索フレーズ正規表現スペースWordが最初にGoogleにヒットしました。
1つの可能性は、acheong87が提案するように、単にあなたの文字クラスにスペースを追加することでしょう。これはあなたのパターンの厳格さによります。
他の可能性はパターンを定義することです:
私は\w
を使います。これはほとんどの正規表現で[a-zA-Z0-9_]
と同じです(あるものではUnicodeベースです)。
^\w+( \w+)*$
これにより、一連の少なくとも1つの単語が許可され、単語はスペースで区切られます。
^
文字列の先頭に一致
\w+
一連の少なくとも1つのWord文字に一致
( \w+)*
は、0回以上繰り返されるグループです。グループでは、スペースとそれに続く一連の少なくとも1つのWord文字が必要です。
$
は文字列の末尾と一致します
これは私のために働いた
([\w ]+)
試してみてください。
^(\w+ ?)*$
説明:
\w - alias for [a-zA-Z_0-9]
"whitespace"? - allow whitespace after Word, set is as optional
先頭や末尾のスペースは不要だと思います。これは、正規表現を "最初の文字"、 "途中のもの"、 "最後の文字"に分割する必要があることを意味します。
^([a-zA-Z0-9_][a-zA-Z0-9_ ]*[a-zA-Z0-9_]$
あるいは、Perlのような構文を使っているなら:
^\w[\w ]*\w$
また、空の文字列も許可することを意図的に正規表現に付け加えた場合は、すべてをオプションにする必要があります。
^(\w[\w ]*\w)?$
単一のスペース文字だけを許可したい場合は、少し違って見えます。
^((\w+ )*\w+)?$
これは、0..n語とそれに続く単一の空白、および空白なしの1つの単語と一致します。そして空の文字列を許可するために全体をオプションにします。
これは最初のスペースを許可しません。しかし、単語の間にスペースを入れてください。単語間の特殊文字も使用できます。 FirstNameおよびLastNameフィールドに適した正規表現です。
\w+.*$
アルファベットのみの場合:
^([a-zA-Z])+(\s)+[a-zA-Z]+$
英数字および_
の場合
^(\w)+(\s)+\w+$
この正規表現
^\w+(\s\w+)*$
単語と単語の間にはスペースを1つだけ入れて、前後にスペースを入れないでください。
以下は正規表現の説明です。
^
文字列の先頭に位置をアサート\w+
任意のWord文字と一致します。[a-zA-Z0-9_]
+
1回と無制限の間、可能な限り多くの回数、必要に応じて返す[greedy](\s\w+)*
*
0回から無制限の間、可能な限り多くの回数、必要に応じて返す[greedy]\s
任意の空白文字と一致します[\r\n\t\f ]
\w+
任意のWord文字と一致します。[a-zA-Z0-9_]
+
1回と無制限の間、可能な限り多くの回数、必要に応じて返す[greedy]$
文字列の末尾に位置をアサート私はこれが "FullName"に適していると思います。
([a-z',.-]+( [a-z',.-]+)*){1,70}/
これらの想定される答えの多くをよく見ていた...
...そして、bupkisはStack Overflowや他のサイトと同様に、開始文字列や末尾の空白文字のない任意の文字列と、厳密に英字の単語の間の単一の空白文字にマッチする正規表現を探します。
^[a-zA-Z]+[(?<=\d\s]([a-zA-Z]+\s)*[a-zA-Z]+$
したがって、簡単に英数字に変更できます。
^[a-zA-Z0-9]+[(?<=\d\s]([a-zA-Z0-9]+\s)*[a-zA-Z0-9]+$
(これは単一の単語とは一致しませんが、さらに単一の単語をキャッチする必要がある場合は、単純な^[a-zA-Z0-9]+$
を指定したスイッチ/ if-elseを使用するだけです。)
お楽しみください:D
次のように正規表現パターンの最後にスペースを追加するだけです。
[a-zA-Z0-9_ ]
ユーザーがキーボード文字を含む場合、上記のコードはすべて機能しません。ユーザーが任意の文字や単語を追加することを許可されているが、単語の間にスペースを入れることができる場合です。
^[^ ]+( [^ ]+)*$
スペースがオプションの場合は、次のものを一致させることができます。
string1 = 'hello_World'
または
string2 = 'hello world'
によって
pattern = '[\w\s]+'
これを試してください:( Python版)
"(A-Za-z0-9 ){2, 25}"
データセットに基づいて上限を変更する