dポイントプレゼントキャンペーン実施中!

PHPを使った正規表現で困っています。

/^(\w|(?!-{2,})-)+$/

・半角大文字(A~Z)、数字(0~9)とハイフン(-)のみ許可.
・先頭にハイフン(-)が利用できない.
・ハイフンは2回連続で利用できない.例) --

に対応したいと思っていますが、いろいろやってみましたが上記の方法で上手くいきません。

A 回答 (3件)

\w は [A-Za-z0-9_] と等価です。


もちろん今回は使えません。

提示されているものに、

・末尾にハイフンが利用できない
・空文字は許可する

という条件も加えさせていただきます。
不都合があれば補足お願いします。

今回用いる正規表現
/\A(?:[A-Z0-9]-?+(?!\z))*+[A-Z0-9]*+\z/

動作確認サンプル
http://ideone.com/evX3Ie

正規表現の書き方に関するポリシー(今回はバックスラッシュエスケープは省略しました)
http://qiita.com/mpyw/items/8dd5378cb01c877e1f7b
    • good
    • 0
この回答へのお礼

加えていただいた条件も必要でした!

やはり自分には複雑な正規表現のようでした。

とてもありがとうございます!

お礼日時:2013/09/27 15:43

こんなんじゃない?



<?PHP
$pattern="/^[A-Z0-9]([A-Z0-9]|-(?!-))*$/";
$array=array("aBC","","A","ABC","-ABC","A-BC","A-B-C","A--BC");
foreach($array as $val){
print $val.":";
print preg_match($pattern,$val)?"ok":"ng";
print "<br>\n";
}
?>

A-Zもしくは0-9ではじまり、0回以上のA-Z0-9か後ろにハイフンのないハイフンで
できた文字列
    • good
    • 0
この回答へのお礼

ありがとうございます!

お礼日時:2013/09/27 15:48

([0-9A-Z]+-)+


みたいなやつ?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!