2

1〜32文字の文字列を検証するコードがあります。このコードには、英数字とハイフン('-')のみが含まれている可能性がありますが、ハイフンで開始または終了することはできません。

私はPCRE正規表現とPHPを使用しています(この場合、PHPの部分はそれほど重要ではありませんが)。

現在、擬似コードは次のようになっています。

if (match("/^[\p{L}0-9][\p{L}0-9-]{0,31}$/u", string) 
    and
    not match("/-$/", string))

   print "success!"

つまり、最初に文字列が正しい内容であり、「-」がなく、正しい長さであることを確認してから、別のテストを実行して、文字列がで終わっていないことを確認します。 '-'。

これを単一のPCRE正規表現にマージするための提案はありますか?

先読み/後読みアサーションを使用しようとしましたが、機能させることができませんでした。

4

2 に答える 2

2

この正規表現を試してください:

/^[\p{L}0-9](?:[\p{L}0-9-]{0,30}[\p{L}0-9])?$/u

また、ルックアラウンドアサーションを使用する場合:

/^[\p{L}0-9][\p{L}0-9-]{0,31}$(?<!-)/u
于 2010-04-23T17:14:05.603 に答える
1

少し別のアプローチは、キャ​​ラクタークラスを1つのピースに保ち、ハイフンを許可したくないポイントについて具体的にすることです。

/^(?!-)[\p{L}0-9-]{1,32}(?<!-)$/Du

Dまた、誰もが常に忘れているように見える修飾子にも注意してください。

最後に、念のために言っておきますが、あなたはそれ\pLがはるかに多く一致することを知っていますa-zA-Zよね?チェックしてるだけ。

于 2010-04-23T18:32:51.823 に答える