タイトル通りによく使う正規表現を毎回ググるのが効率悪いのでまとめてみました。各言語で正規表現のサンプルを書いてみました。
正規表現式
Emailアドレス
^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
ドメイン名
^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}$
インタネットURL
^(http|https)://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
ユーザー名 (Twitter username)
^[a-zA-Z0-9_\-.]{3,15}$
固定電話
^0\d-\d{4}-\d{4}$
携帯電話
^(070|080|090)-\d{4}-\d{4}$
IP電話
^050-\d{4}-\d{4}$
フリーダイヤル
^0120-\d{3}-\d{3}$
パスワード(大文字小文字英数字組み合わせ、特殊文字禁止、長さは8-10
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
日付 (YYYY-MM-DD)
^\d{4}-\d{1,2}-\d{1,2}$
郵便番号
^\d{3}-\d{4}$
XML
^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$
空白行
\n\s*\r
先頭後尾空白文字
^\s*|\s*$
IPアドレス
\d+\.\d+\.\d+\.\d+
IPアドレス
((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))
数字
^[0-9]*$
N桁数字
^\d{n}$
N桁以下数字
^\d{n,}$
M-N桁数字
^\d{m,n}$
ゼロから始まる数字
^(0[0-9]*)$
ゼロ以外から始まる数字
^([1-9][0-9]*)$
小数点以下1-2位数字
^(\-)?\d+(\.\d{1,2})?$
正整数
^[1-9]\d*$
負整数
^\-[1-9]\d*$
英数字
^[A-Za-z0-9]+$
長さが3-20の全ての文字
^.{3,20}$
大文字小文字26英字
^[A-Za-z]+$
大文字26英字
^[A-Z]+$
小文字26英字
^[a-z]+$
言語別
Go
package main
import (
"fmt"
"regexp"
)
func main() {
rep := regexp.MustCompile(`^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$`)
isEmail := rep.MatchString("dongri@qiita.com")
fmt.Println(isEmail) // true | false
}
Ruby
#!/usr/bin/env ruby
rep = Regexp.new("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$")
isEmail = rep === "dongri@qiita.com"
puts isEmail
JavaScript
var regex = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
regex.test("dongri@qiita.com"); // true | false
var regex = new RegExp('^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$');
regex.test("dongri@qiita.com"); // true | false
Perl
#!/usr/bin/env perl
$rep = '^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$';
$email = 'dongri.@qiita.com';
if ($email =~ /$rep/) {
print "valid";
} else {
print "invalid";
}
Python
#!/usr/bin/env python
import re
rep = '^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$';
email = 'dongri@qiita.com';
isEmail = re.match(rep, email) != None;
print(isEmail);
Swift
import Foundation
let rep = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$"
let email = "dongri@qiita.com"
let isEmail = NSPredicate(format: "SELF MATCHES %@", rep).evaluate(with: email)
print(isEmail)
Java
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
String regex = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";
String email = "dongri@qiita.com";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(email);
Boolean isEmail = matcher.matches();
System.out.println(isEmail);
}
}
追記
想像以上にバズってツッコミ満載ですが、この記事の目的は弊社がこれらを使ってる、これらが一番良い式ではなく、あくまで一例を示してます。みなさんもおわかりかと思いますが、正規表現は効率良い、悪い、キレイ、汚いいろんな書き方もあれば要件によって100%汎用なものを作って毎回それを使うのは無理かと思います。基本的なベースがあれば、そこにちょっと手を入れてチューニングすれば自分達が必要な式を求められるんじゃないかと思います。そのようなニュアンスで書いたサンプルようなものでした。
Like, Stockしてる方々も参考になれると思いますので。引き続きツッコミお願いします。
「英数字」と「大文字小文字26英字+数字」は同じ意味でしょうか。
@7of9 失礼しました。同じ意味でした。下の方削除します。
Ruby の場合,
などと書かなくても正規表現リテラルがあるので,
/云々/
と書けます。
この書き方だと,正規表現がバックスラッシュを含む場合に,
などと面倒なエスケープをせずに
/\d/
と書けます。
なお,
という書き方は何の問題もありませんが,
===
はcase
式やgrep
などで暗黙に呼ばれるメソッドというテイスト(?)なので,という書き方のほうをお勧めします。
また,非常に大事なことですが,Ruby の
^
,$
は文字列の先頭・末尾ではなく行頭・行末です。従って,たとえば
str
が数字のみからなっていることを確認しようとしてと書いてはいけません。
str
が"abc\n123\ndef"
のような場合でも真になってしまいます。この手のバグは極めて深刻なセキュリティー上の問題につながる恐れがあります。
以上が Ruby についてですが,正規表現の内容についても気になるところがちらほらあります。
たとえば固定電話が
となっていますが,市外局番は最大 4 桁ですよね。
(市外局番は 0 を除いた部分を指すようです。03 の 0 はプレフィクスで,市外局番の一部ではないんですね。いま知りました)
Rubyときなのですが、
@scivola さんの言うように
/云々/
もできますし、以下のように
%r
を使って書くこともできます。%r
の利点は/
などをエスペケープせずに使えるので、URLを以下のように書けるようになることです。%r{^(http|https)://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$}
正規表現を使うべきか?は常に考えたほうが良いですね。
正規表現を正しく理解できないことによる、
脆弱性、処理効率、可読性の悪さなど、あまり人におすすめできる道具ではないです。
私自身は正規表現が大好きですけど・・・。
例で見れば、
なんかは、正規表現でやらんでも、という感じです。
だいぶ懐かしいページではありますが、
http://www.din.or.jp/~ohzaki/mail_regex.htm とか
http://www.din.or.jp/~ohzaki/perl.htm#httpURL とか読むとタノシイですよ。
Perl互換の正規表現で闇に飲まれる感じがたまりません
0800-xxx-xxxのフリーダイヤルはの固定電話
^0\d-\d{4}-\d{4}$
にもフリーダイヤル^0120-\d{3}-\d{3}$
にも該当しなくて使えませんよね。少なくとも東京大阪以外と千葉埼玉の一部以外にヒットしない固定電話は実用に耐えないと思いますが……
あとは空白行チェックの
\n\s*\r
もCRLFでしか使えないのでどうかと思います。ruby版で、"<script>alert(1)</script>\ndongri@qiita.com" を判定させると true になりますね。これは脆弱性と言ってよいレベルではないでしょうか? (バリデーションだけでXSS対策するのはよくありませんが、それはそれとして)
既出でしたね。失礼しました。なお、$はRubyの場合に、より顕著ですが、他の言語でも使わない方がよいです。
https://blog.tokumaru.org/2014/03/z.html
(070|080|090)
は0[789]0
の方が短く分かりやすいのではないでしょうか数字などで*を使用すると空文字も検出されるので
![reg_number.png](data:image/png;base64,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)
+を使用したほうが良いかと。
異常に反応が多かったので、本文に追記しました。
みなさん、いろんなツッコミありがとうございます!
引き続きよろしくお願いします。
Pythonの例についてちょっと申し上げます。一般的には
と書けます。元の例文との相違点について:
rep
のリテラルはr-stringにする。これは\s
や\n
のようなエスケープシーケンスを回避できるで便利です。None
とのコンペアはis
とis not
にする。また、同じパターンを複数回使用するときに、こうやってリソース節約出来ます:
差し出がましいようですが失礼しました。
This is really good one.Thank you for sharing this.Payroll software Dubai appreciate you for providing the examples in different languages thus useful for everyone.