Current section
Files
Jump to
Current section
Files
lib/core/const.ex
defmodule Gulib.Const do
#### http://elixir-lang.org/docs/master/elixir/Regex.html
@ip_regex ~r"^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$"
@scan_url_regex ~r"((mailto|http|https|thunder|ftp|sftp|svn)\:\/\/|www.)[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\=\&\.\?\,\'\/\\\+&%\$#_]*)?"
@email_regex ~r"\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z"
@pure_number_regex ~r"\A[0-9]*\z"
@words_regex ~r/[\w-_0-9]+/u
@match_url_regex ~r"^((mailto|http|https|thunder|ftp|sftp|svn)\:\/\/|www.)[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\=\&\.\?\,\'\/\\\+&%\$#_]*)?$"
@mobile_number_formats [
cn: %{
length: 11,
regex: ~r/^(0|86|17951)?(13[0-9]|15[0-9]|17[0-9]|18[0-9]|14[0-9])[0-9]{8}$/u
}
]
@spider_regex ~r(spider|bot|crawler|ysearch\/slurp)
def spider_regex, do: @spider_regex
@doc "IO地址的正则表达式"
def ip_regex, do: @ip_regex
@doc "电子邮箱的正则表达式"
def email_regex, do: @email_regex
@doc "纯数字的正则表达式"
def pure_number_regex, do: @pure_number_regex
@doc "文字正则"
def words_regex, do: @words_regex
@doc "只匹配文字,下划线和中划线, 数字"
def name_regex_match?(str) do
(String.replace(str, @words_regex, "") |> String.length) == 0
end
@doc "半角和全角得空格"
def space_strings, do: [" ", " "]
@doc "匹配URL的正则表达式"
def match_url_regex, do: @match_url_regex
@doc """
扫描出URL的正则表达式
```
eg:
* https://msdn.microsoft.com/en-us/library/ff650303.aspx#paght000001_commonregularexpressions
* http://stackoverflow.com/questions/1323283/how-to-match-url-in-c
```
"""
def scan_url_regex, do: @scan_url_regex
@doc "手机号码的正则表达式,按照国家归属"
def mobile_number_formats, do: @mobile_number_formats
def normalize_mobile_number!(country_key, mobile_number) do
if mobile_number_format = @mobile_number_formats |> Gulib.get(country_key) do
length_require = mobile_number_format |> Gulib.get(:length)
mobile_number =
mobile_number
|> Gulib.to_s
|> String.trim
length = String.length(mobile_number)
cond do
length > length_require -> String.slice(mobile_number, -length_require, length_require)
true -> mobile_number
end
else
mobile_number
end
end
def mobile_number_match?(nil, _mobile_number), do: false
def mobile_number_match?(_country_key, nil), do: false
def mobile_number_match?(country_key, mobile_number) do
if mobile_number_format = @mobile_number_formats |> Gulib.get(country_key) do
Regex.match?(mobile_number_format[:regex], mobile_number)
else
false
end
end
end