0

以下に一致する正規表現を作成します。

文字列は小文字の英数字 (az) のみで構成する必要があり、単一の「-」を使用する必要があります。たとえば、「trash-bin」は問題ありませんが、「trash--bin」または「-bin」は問題ありません。

正規表現はどのように見えるべきですか? また、説明できれば幸いです。

これまでのところ、次のようになります。

/^[0-9a-z]+-+$/

UPDATED TO:

^(?!\A-)+[0-9a-z]+-?$

私が知らないのは、複数の - が互いに続くことを禁止する方法、または文字列が - で始まることを禁止する方法です。

4

4 に答える 4

1
^([a-z0-9]+(\-[a-z0-9]+)*)$

これでうまくいくかもしれません。http://www.regextester.com/でテストしてください( phpの関数で使用される方言であるpreg方言を選択してください)preg_*

于 2012-12-17T21:39:58.960 に答える
0

ハイフンが 1 つだけ必要で、それも 2 つ以上の文字 (すべて小文字) の間にのみ必要な場合は、おそらく次の手順を省略できます。

^[a-z0-9]+-?[a-z0-9]+$

@ http://www.pagecolumn.com/tool/pregtest.htmでテストしてください。

于 2012-12-17T21:46:32.203 に答える
0

あなたがしたい^[a-z0-9]+(-[a-z0-9]+)*$

$str=array("trash-bin","TRASH-Bin","232trash-bin","-trash-bin","trash","t--b");

foreach ($str as $val) {
  preg_match('/^[a-z0-9]+(-[a-z0-9]+)*$/',$val,$match);
  echo $match[0];
}

>>> trash-bin
>>> 123trash-bin
>>> trash 

再説明:

^           # Match the start of the string
[a-z0-9]+   # Followed by one or more lowercase letter or digit
(-          # Followed by an hyphen
[a-z0-9]+   # Followed by one or more lowercase letter or digit 
)*          # Pattern inside brackets can occur zero or more times
$           # Followed by the end of the string
于 2012-12-17T21:44:05.523 に答える
0

最初に、文字列が英数字で始まり、ある程度の長さ続くことを確認します (1 つ以上の一致が必要です)。

次に、サブパターンを開始して、文字列内のハイフンに一致する場合は、後続の英数字も一致させる必要があることを確認できるようにします。

サブパターン内では、単一の - を許可します (次のクラスを否定しないようにエスケープします)

いくつかの英数字が続きます (1 つ以上の一致が必要です)。サブパターンを閉じます。[最初の質問から、文字列内で単一のダッシュのみを許可する必要があるのか​​ 、それとも連続していない限り複数のダッシュを許可するのかが明確ではありませんでした。複数が許可されている場合は、0 個以上のサブパターンの一致を許可します。それ以外の場合は、ゼロまたは 1 つの一致を許可します]

パターンは次のいずれかです。

^([:alnum:]+(\-[:alnum:]+)?)$

(ダッシュが 1 つだけ許可されている場合、またはまったく許可されていない場合) または

^([:alnum:]+(\-[:alnum:]+)*)$

複数のダッシュがある可能性があるが連続していない場合 (つまり、二重ダッシュがない場合)

于 2012-12-17T21:53:02.797 に答える