有时候我们在使用Canvas绘制一段文本时,会需要通过measureText()
方法获取文本的宽度,例如:
创建canvas标签
1 | <canvas id="canvas"></canvas> |
开发中,经常会需要做一些正则匹配,比如手机号验证,email验证,URL匹配等,写此篇文章主要是记录如何使用正则表达式匹配URL,方便以后再遇到此问题时不必到处搜索而得不到满意的答案。
1 | %^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@|\d{1,3}(?:\.\d{1,3}){3}|(?:(?:[a-z\d\x{00a1}-\x{ffff}]+-?)*[a-z\d\x{00a1}-\x{ffff}]+)(?:\.(?:[a-z\d\x{00a1}-\x{ffff}]+-?)*[a-z\d\x{00a1}-\x{ffff}]+)*(?:\.[a-z\x{00a1}-\x{ffff}]{2,6}))(?::\d+)?(?:[^\s]*)?$%iu |
1 | if (filter_var($url, FILTER_VALIDATE_URL) !== false)... |
1 | http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+ |
1 | /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-_]*)?\??(?:[\-\+=&;%@\.\w_]*)#?(?:[\.\!\/\\\w]*))?)/ |
1 | <input type="url" /> |
匹配上面input
输入的URL(RFC3986)
1 | ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))? |
1 | ^(((ht|f)tp(s?))\://)?(www.|[a-zA-Z].)[a-zA-Z0-9\-\.]+\.(com|edu|gov|mil|net|org|biz|info|name|museum|us|ca|uk)(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\;\?\'\\\+&%\$#\=~_\-]+))*$ |
1 | /\A(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?\z/i |
1 | package main |
1 | (http|https)://((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+ |
1 | ((?:http|https)://)?(?:www\\.)?[\\w\\d\\-_]+\\.\\w{2,3}(\\.\\w{2})?(/(?<=/)(?:[\\w\\d\\-./_]+)?)? |
定义一个函数方法:
1 | func canOpenURL(string: String?) -> Bool { |
使用:
1 | if canOpenURL("http://www.urlregex.com") { |
1 | UIApplication.sharedApplication().canOpenURL(urlString) |
1 | ^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|] |
1 | (http(s)?://)?([\w-]+\.)+[\w-]+[.com]+(/[/?%&=]*)? |
1 | ^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$ |
1 | SELECT field FROM table |
在开发中,经常需要对用户传过来的数据进行过滤,来阻止一些用户的恶意输入,在PHP中常用到htmlspecialchars()
、htmlentities()
和strip_tags()
函数来处理。
今天在使用htmlspecialchars()
做特殊字符的转换时,一直返回null
,当我换成htmlentities()
也是同样的问题,查官方手册才发现原来是编码的问题。
函数声明:
204
问题主要处在第三个参数上,对于第三个参数官方是这么说的:
306
这个参数的作用是设置转换字符时采用的编码,在PHP 5.4 和5.5中使用了UTF-8作为默认编码,而在PHP 5.4之前使用ISO-8859-1作为默认编码,从PHP 5.6开始就使用PHP配置文件中的default_charset
参数作为默认编码。encoding
参数支持的字符集:
535
从PHP的更新日志也能看到这个参数的变化:
630
一般我们是这么使用的:
1 | $str='<a href="test.html">\'测试页面\'</a><script>alert(213)</script>'; |
今天在使用的时候,结果一直返回null,其实就是编码的问题,这个时候就需要用到第三个参数了:
1 | echo htmlspecialchars($string, ENT_COMPAT,'ISO-8859-1', true); |
同样,也适用于htmlentities
:
1 | echo htmlentities($string, ENT_COMPAT,'ISO-8859-1', true); |
欢迎阅读本篇文章,如有兴趣可以关注博主公众号哦: