MatchCollection matches = Regex.Matches(content, @"<a[^>]*href=([""'])?(?<href>[^'""]+)\1[^>]*>", RegexOptions.IgnoreCase);
foreach (Match item in matches)
{
var href= item.Groups[1].Value;
}
JavaScript 判断浏览器是否支持Html5
利用html5特有的tag判断是否支持html5
function isSupportHtml5() {
return !!document.createElement('canvas').getContext;
}
JavaScript 判断浏览器是否支持CSS3
function isSupportCss3() {
//创建一个 element
var css3Div = document.createElement('div');
//判断是否支持圆角
if ('border-radius' in css3Div.style) {
//赋值css3属性
css3Div.style['border-radius'] = '3px';
//检测css3属性赋值是否成功
return css3Div.style['border-radius'] == '3px';
}
else {
return false;
}
}
IP2Location for .NET Standard 组件
IP2Location for.net Standard 组件是一个基于 .net Standard 框架的软件开发组件和数据解决方案,它使您能够实时发现您的web访问者通过ip地址来自何处。然后您可以根据访问者的国家、地区、城市、纬度、经度、邮政编码、ISP、域名、时区、连接速度、IDD代码、区号、气象站代码、气象站名称、MCC、MNC、移动品牌名称、海拔和使用类型动态调整网站内容。
文件下载:
IP2Location 组件: https://down.24kplus.com/dev/IP2Location-1.0.0.0.zip
免费 IP2Location BIN 数据: https://lite.ip2location.com
商业 IP2Location BIN 数据: https://www.ip2location.com/database/ip2location
要求
Microsoft .NET 4.0 framework 或更高 / Microsoft .NET Core 2.0 或更高。
方法
方法名
|
描述
|
---|---|
Close
|
关闭并清理文件缓存
|
IPQuery
|
IP信息查询
|
Dispose
|
释放由 IP2Location 占用的资源。
|
属性
属性名
|
描述
|
---|---|
UseMemoryMappedFile
|
设置或获取是否使用内存映射文件(MMF)
|
MapFileName
|
内存映射文件名(仅Win32平台有效)
|
IPDatabasePath
|
IP数据库文件位置
|
IPDatabaseVersion
|
IP数据库版本
|
示例
static void Main(string[] args)
{
using (Component component = new Component())
{
component.IPDatabasePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "IP2LOCATION.BIN");
IPResult result = component.IPQuery("58.220.95.56");
Console.WriteLine("AreaCode: " + result.AreaCode);
Console.WriteLine("CountryCode: " + result.CountryCode);
Console.WriteLine("Country: " + result.Country);
Console.WriteLine("Region: " + result.Region);
Console.WriteLine("City: " + result.City);
Console.WriteLine("Latitude: " + result.Latitude);
Console.WriteLine("Longitude: " + result.Longitude);
...
}
Console.ReadKey();
}
SQL Server 禁用或启用自增列
适用于:
允许将显式值插入到表的标识列中。
语法
SET IDENTITY_INSERT [ [ database_name . ] schema_name . ] table_name { ON | OFF }
参数
参数名
|
简要说明
|
---|---|
database_name | 指定的表所在的数据库的名称。 |
schema_name | 表所属架构的名称。 |
table_name | 包含标识列的表的名称。 |
备注
任何时候,一个会话中只有一个表的 IDENTITY_INSERT
属性可以设置为 ON
。 如果某个表已将此属性设置为 ON
,则对另一个表发出 SET IDENTITY_INSERT ON
语句时,SQL Server 将返回一个错误信息,指出 SET IDENTITY_INSERT
已设置为 ON
,并报告已将其属性设置为 ON
的表。
如果插入值大于表的当前标识值,则 SQL Server 自动将新插入值作为当前标识值使用。
SET IDENTITY_INSERT
的设置是在执行或运行时设置的,而不是在分析时设置的。
权限
用户必须拥有表,或对表具有 ALTER
权限。
示例
下面的示例将创建一个包含标识列的表,并说明如何使用 SET IDENTITY_INSERT
设置来填充由 DELETE
语句导致的标识值中的空隙。
USE AdventureWorks2012;
GO
-- Create tool table.
CREATE TABLE dbo.Tool(
ID INT IDENTITY NOT NULL PRIMARY KEY,
Name VARCHAR(40) NOT NULL
);
GO
-- Inserting values into products table.
INSERT INTO dbo.Tool(Name)
VALUES ('Screwdriver')
, ('Hammer')
, ('Saw')
, ('Shovel');
GO
-- Create a gap in the identity values.
DELETE dbo.Tool
WHERE Name = 'Saw';
GO
SELECT *
FROM dbo.Tool;
GO
-- Try to insert an explicit ID value of 3;
-- should return an error:
-- An explicit value for the identity column in table 'AdventureWorks2012.dbo.Tool' can only be specified when a column list is used and IDENTITY_INSERT is ON.
INSERT INTO dbo.Tool (ID, Name) VALUES (3, 'Garden shovel');
GO
-- SET IDENTITY_INSERT to ON.
SET IDENTITY_INSERT dbo.Tool ON;
GO
-- Try to insert an explicit ID value of 3.
INSERT INTO dbo.Tool (ID, Name) VALUES (3, 'Garden shovel');
GO
SELECT *
FROM dbo.Tool;
GO
-- Drop products table.
DROP TABLE dbo.Tool;
GO
C# .NET 验证Email是否正确
验证字符串是否为有效的电子邮件格式
示例
该示例定义 IsValidEmail
方法,如果字符串包含有效的电子邮件地址,则该方法返回 true
,否则返回 false
,但不采取其他任何操作。
请注意, IsValidEmail
方法不执行身份验证来验证电子邮件地址。 它只确定其格式对于电子邮件地址是否有效。 此外, IsValidEmail
方法不对顶级域名是否是 IANA 根区域数据库中列出的有效域名进行验证,这需执行查找操作。 相反,正则表达式仅验证由二到二十四个 ASCII 字符组成的顶级域名,该域名以字母数字开头并以字符结尾,且其余的字符是字母数字或连字符 (-)。
using System;
using System.Globalization;
using System.Text.RegularExpressions;
public class RegexUtil
{
public static bool IsValidEmail(string email)
{
if (string.IsNullOrWhiteSpace(email))
return false;
try
{
// Normalize the domain
email = Regex.Replace(email, @"(@)(.+)$", DomainMapper,
RegexOptions.None, TimeSpan.FromMilliseconds(200));
}
catch (RegexMatchTimeoutException e)
{
return false;
}
catch (ArgumentException e)
{
return false;
}
try
{
return Regex.IsMatch(email,
@"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
@"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-0-9a-z]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$",
RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));
}
catch (RegexMatchTimeoutException)
{
return false;
}
}
static string DomainMapper(Match match)
{
// Use IdnMapping class to convert Unicode domain names.
var idn = new IdnMapping();
// Pull out and process domain name (throws ArgumentException on invalid)
var domainName = idn.GetAscii(match.Groups[2].Value);
return match.Groups[1].Value + domainName;
}
}
CentOS 7 安装 gcc-c++
解决 configure: error: C++ preprocessor "/lib/cpp" fails sanity check
错误,执行以下:
yum install gcc-c++
JavaScript 扩展 String 属性
JavaScript 扩展 String 属性,实现 endsWith、startsWith、trim、trimEnd、trimStart和toBytes。
//左匹配
String.prototype.endsWith = function (suffix) {
return (this.substr(this.length - suffix.length) === suffix);
}
//右匹配
String.prototype.startsWith = function (prefix) {
return (this.substr(0, prefix.length) === prefix);
}
//去前后空格
String.prototype.trim = function () {
return this.replace(/^\s+|\s+$/g, '');
}
//去结尾空格
String.prototype.trimEnd = function () {
return this.replace(/\s+$/, '');
}
//去前面空格
String.prototype.trimStart = function () {
return this.replace(/^\s+/, '');
}
//转byte数组
String.prototype.toBytes = function () {
var ch, st, re = [];
for (var i = 0; i < this.length; i++) {
ch = this.charCodeAt(i); // get char
st = []; // set up "stack"
do {
st.push(ch & 0xFF); // push byte to stack
ch = ch >> 8; // shift value down by 1 byte
}
while (ch);
// add stack contents to result
// done because chars have "wrong" endianness
re = re.concat(st.reverse());
}
// return an array of bytes
return re;
}
C# .NET Execl 转 DataTable
试用Spire.Xls读取Execl文件或IO,导出到 DataTable。
public DataTable ReadExecl(string fileName)
{
using (var workbook = new Spire.Xls.Workbook())
{
workbook.LoadFromFile(fileName);
using (var sheet = workbook.Worksheets[0])
{
return sheet.ExportDataTable();
}
}
}
C# .NET Ping 域名或IP地址
Ping 域名或者IP地址,判读是否能正常连接到目标服务器。建议执行循环3~5次,取平均值判断网络延时更准确。
实例:
public static void SimplePing ()
{
Ping pingSender = new Ping ();
PingReply reply = pingSender.Send ("www.24kplus.com");
if (reply.Status == IPStatus.Success)
{
Console.WriteLine ("Address: {0}", reply.Address.ToString ());
Console.WriteLine ("RoundTrip time: {0}", reply.RoundtripTime);
Console.WriteLine ("Time to live: {0}", reply.Options.Ttl);
Console.WriteLine ("Don't fragment: {0}", reply.Options.DontFragment);
Console.WriteLine ("Buffer size: {0}", reply.Buffer.Length);
}
else
{
Console.WriteLine (reply.Status);
}
}