Webプログラミングに関わらず、
どのようなプログラミングでも必ずと言っていい程、正規表現を使います。
e-mailのフォーマット チェック、URLチェック、郵便局、電話番号...etc
” 避けては通れなくて、メタ文字で中々 取っ付きにくい ”のが正規表現です。
今回は、そんな正規表現を簡単に使えるようにする
Javascriptライブラリ「JSVerbalExpressions」の紹介です。
JSVerbalExpressionを使うと本当に文字の正規表現が簡単に使えます。
導入にはサイトからのダウンロード、
npmパッケージからインストールする他にbowerも利用出来ます。
// インストール
npm install verbal-expressions
// node.jsで使う場合
var VerEx = require("verbal-expressions");
# * bowerからインストールする場合
bower install verbal-expressions
例えば、このサイトのContactページのe-mailの判定は下記の様なコードを使っています。
( *実際にはlodash.jsの"_.mixin"でまとめています )
# e-mailの判定 *CoffeeScript
isValidEmail: (email) ->
emailPattern = /// ^([\w.-]+)@([\w.-]+)\.([a-zA-Z.]{2,6})$ ///i
if email.match emailPattern
return true
JSVerbalExpressionsを使うとe-mailマッチのコードが下記の様に表現出来ます。
// javascriptファイル
// *この場合は日本語ドメインも想定しています
var email = VerEx()
.anything("")
.then("@")
.anything("")
.then('.')
.anything("");
var mail = "test@test.com";
// console.log(email); /(?:.*)(?:\@)(?:.*)(?:\.)(?:.*)/gm
console.log(email.test(mail)); // パターンがマッチしてるとtrueと表示
公式通りのサンプルを使うとURLのチェックが下記の様に出来ます!
正規表現には切っても切れないメタ文字等は一切含まれておりません。
// 正規表現パターンの作成
var tester = VerEx()
.startOfLine()
.then( "http" ) // httpを含む
.maybe( "s" ) // sを含むかもしれない
.then( "://" ) // ://を含む
.maybe( "www." ) // www.を含むかもしれない
.anythingBut( " " ) // 何らかの文字が含まれる
.endOfLine();
// URL
var testMe = "https://www.google.com";
// 生成されるパターン
// /^(?:http)(?:s)?(?:\:\/\/)(?:www\.)?(?:[^\ ]*)$/gm
console.log(tester);
console.log( tester.test( testMe ) ); // true or false
また、JSVerbalExpressionsに機能が用意されていない場合でも
add()メソッドを使って独自に式を追加することもできます。
// 郵便番号を想定して7桁の数字のパターン
var zip = VerEx().add("^[0-9]{7}$");
var code = 1234567;
console.log (zip.test(code)); // true or false
JSVerbalExpressionsを使うとメタ文字を最小限に書かずに正規表現が簡単に書けますね!
underscore.jsやlodash.jsをお使いの人は
よく使いそうな関数を下記の様に_.mixinを使って独自に関数を拡張しておくのも良さそうです。
_.mixin({
isEmail: function () {
return VerEx()
.anything()
.then("@")
.anything()
.then('.')
.anything()
.endOfLine();
},
isURL: function () {
return VerEx()
.startOfLine()
.then( "http" )
.maybe( "s" )
.then( "://" )
.maybe( "www." )
.anythingBut( " " )
.endOfLine();
}
});
// example
mail = "test@test.com";
console.log(_.isEmail().test(mail)); // true or false
今回はJavascript版を紹介しましたが、VerbalExpressionsは
PHPやPython,Swift,Java ...etc 各言語用の正規表現ライブラリも公開しているので
正規表現を簡単に書きたい人はゼヒ×2チェックしてみてください!
JSVerbalExpressions
JSVerbalExpressions: API Wiki