আমি ইউআরএলগুলির জন্য একটি সাধারণ রেইজেক্সের সন্ধান করছি, কারও কি এমন এক হাত আছে যা ভাল কাজ করে? আমি জেন্ডার ফ্রেমওয়ার্ক বৈধতা শ্রেণীর সাথে একটিও পাইনি এবং বেশ কয়েকটি বাস্তবায়ন দেখেছি।
আমি ইউআরএলগুলির জন্য একটি সাধারণ রেইজেক্সের সন্ধান করছি, কারও কি এমন এক হাত আছে যা ভাল কাজ করে? আমি জেন্ডার ফ্রেমওয়ার্ক বৈধতা শ্রেণীর সাথে একটিও পাইনি এবং বেশ কয়েকটি বাস্তবায়ন দেখেছি।
উত্তর:
আমি এটি কয়েকটি প্রকল্পে ব্যবহার করেছি, আমি বিশ্বাস করি না যে আমি সমস্যাগুলি নিয়ে চলেছি তবে আমি নিশ্চিত যে এটি সম্পূর্ণ নয়:
$text = preg_replace(
'#((https?|ftp)://(\S*?\.\S*?))([\s)\[\]{},;"\':<]|\.\s|$)#i',
"'<a href=\"$1\" target=\"_blank\">$3</a>$4'",
$text
);
শেষে বেশিরভাগ এলোমেলো আবর্জনা হ'ল http://domain.com.
বাক্যটির মতো পরিস্থিতিগুলি মোকাবেলা করা (পিছনের সময়ের সাথে মিলে যাওয়া এড়াতে)। আমি নিশ্চিত এটি পরিষ্কার করা যেতে পারে তবে যেহেতু এটি কাজ করেছে। আমি কমবেশি কেবল এটিকে প্রকল্প থেকে প্রকল্পে অনুলিপি করেছি।
google.com
কেবলমাত্র বৈধ আপেক্ষিক ইউআরএল পাথ তবে একটি বৈধ পরম URL নয়। এবং আমি মনে করি সেটাই সে খুঁজছিল।
http://example.com/somedir/...
হ'ল একটি যথাযথ বৈধ ইউআরএল, নামের ফাইলটির জন্য জিজ্ঞাসা ...
- যা বৈধ ফাইলের নাম।
http://www.example
filter_var()
স্ট্রিংটি ইউআরএল কিনা তা যাচাই করতে ফাংশনটি ব্যবহার করুন :
var_dump(filter_var('example.com', FILTER_VALIDATE_URL));
যখন প্রয়োজন হয় না তখন নিয়মিত ভাব প্রকাশ করা খারাপ অভ্যাস।
সম্পাদনা : সতর্কতা অবলম্বন করুন, এই সমাধানটি ইউনিকোড-নিরাপদ নয় এবং এক্সএসএস-নিরাপদ নয়। আপনার যদি জটিল বৈধতার প্রয়োজন হয় তবে অন্য কোথাও দেখা ভাল।
http://www
পিএইচপি ম্যানুয়াল অনুসারে - কোনও URL টি যাচাই করার জন্য parse_url ব্যবহার করা উচিত নয় ।
দুর্ভাগ্যক্রমে, মনে হচ্ছে এটি এর থেকে filter_var('example.com', FILTER_VALIDATE_URL)
আরও ভাল কিছু করে না।
উভয়ই parse_url()
এবং filter_var()
ত্রুটিযুক্ত URL গুলি যেমন পাস করবেhttp://...
অতএব এই ক্ষেত্রে - Regex হয় ভাল পদ্ধতি।
কেবলমাত্র যদি আপনি জানতে চান যে url আসলেই আছে কিনা:
function url_exist($url){//se passar a URL existe
$c=curl_init();
curl_setopt($c,CURLOPT_URL,$url);
curl_setopt($c,CURLOPT_HEADER,1);//get the header
curl_setopt($c,CURLOPT_NOBODY,1);//and *only* get the header
curl_setopt($c,CURLOPT_RETURNTRANSFER,1);//get the response as a string from curl_exec(), rather than echoing it
curl_setopt($c,CURLOPT_FRESH_CONNECT,1);//don't use a cached version of the url
if(!curl_exec($c)){
//echo $url.' inexists';
return false;
}else{
//echo $url.' exists';
return true;
}
//$httpcode=curl_getinfo($c,CURLINFO_HTTP_CODE);
//return ($httpcode<400);
}
$url
ইউআরএলটি যাচাই করার আগে আমি বাস্তবের যাচাই করার আগে আমি কিছু প্রকারের বৈধতা যাচাই করব কারণ উপরের ক্রিয়াকলাপটি ব্যয়বহুল - সম্ভবত ফাইলের আকারের উপর নির্ভর করে 200 মিলিসেকেন্ডের বেশি। কিছু ক্ষেত্রে ইউআরএলটির বাস্তবে এখনও উপলব্ধ অবস্থানে কোনও সংস্থান থাকতে পারে না (যেমন কোনও চিত্রের ইউআরএল তৈরি করা যা এখনও আপলোড হতে পারে না)। অতিরিক্তভাবে আপনি কোনও ক্যাশেড সংস্করণ ব্যবহার করছেন না যাতে এটির মতো নয় file_exists()
যে কোনও ফাইলে একটি স্ট্যাটাস ক্যাশে হবে এবং প্রায় তাত্ক্ষণিকভাবে ফিরে আসবে। আপনার প্রদত্ত সমাধানটি এখনও কার্যকর। শুধু ব্যবহার fopen($url, 'r')
করবেন না কেন ?
অনুযায়ী জন Gruber (সাহসী ফায়ারবল):
Regex:
(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’]))
প্রিগ_ম্যাচ () ব্যবহার করে:
preg_match("/(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’]))/", $url)
এখানে বর্ধিত রেজেক্স প্যাটার্ন (মন্তব্য সহ):
(?xi)
\b
( # Capture 1: entire matched URL
(?:
https?:// # http or https protocol
| # or
www\d{0,3}[.] # "www.", "www1.", "www2." … "www999."
| # or
[a-z0-9.\-]+[.][a-z]{2,4}/ # looks like domain name followed by a slash
)
(?: # One or more:
[^\s()<>]+ # Run of non-space, non-()<>
| # or
\(([^\s()<>]+|(\([^\s()<>]+\)))*\) # balanced parens, up to 2 levels
)+
(?: # End with:
\(([^\s()<>]+|(\([^\s()<>]+\)))*\) # balanced parens, up to 2 levels
| # or
[^\s`!()\[\]{};:'".,<>?«»“”‘’] # not a space or one of these punct chars
)
)
আরও তথ্যের জন্য দয়া করে দেখুন: http://deringfireball.net/2010/07/mproved_regex_for_matching_urls
আমি মনে করি না যে নিয়মিত এক্সপ্রেশন ব্যবহার করা এই ক্ষেত্রে করণীয় is সমস্ত সম্ভাবনার সাথে মিল পাওয়া অসম্ভব এবং এমনকি যদি আপনি এটি করেন তবে এখনও এমন একটি সম্ভাবনা রয়েছে যা ইউআরএল কেবল উপস্থিত নেই।
ইউআরএলটি আসলে উপস্থিত রয়েছে এবং পাঠযোগ্য কিনা তা পরীক্ষা করার এখানে একটি খুব সহজ উপায়:
if (preg_match("#^https?://.+#", $link) and @fopen($link,"r")) echo "OK";
(যদি না থাকে preg_match
তবে এটি আপনার সার্ভারে থাকা সমস্ত ফাইলের নামও বৈধ করবে)
আমি এটি ভাল সাফল্যের সাথে ব্যবহার করেছি - কোথা থেকে পেয়েছি তা মনে নেই
$pattern = "/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i";
function validateURL($URL) {
$pattern_1 = "/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i";
$pattern_2 = "/^(www)((\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i";
if(preg_match($pattern_1, $URL) || preg_match($pattern_2, $URL)){
return true;
} else{
return false;
}
}
এবং আপনার উত্তর আছে =) এটি ভাঙ্গার চেষ্টা করুন, আপনি পারবেন না !!!
function link_validate_url($text) {
$LINK_DOMAINS = 'aero|arpa|asia|biz|com|cat|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel|mobi|local';
$LINK_ICHARS_DOMAIN = (string) html_entity_decode(implode("", array( // @TODO completing letters ...
"æ", // æ
"Æ", // Æ
"À", // À
"à", // à
"Á", // Á
"á", // á
"Â", // Â
"â", // â
"å", // å
"Å", // Å
"ä", // ä
"Ä", // Ä
"Ç", // Ç
"ç", // ç
"Ð", // Ð
"ð", // ð
"È", // È
"è", // è
"É", // É
"é", // é
"Ê", // Ê
"ê", // ê
"Ë", // Ë
"ë", // ë
"Î", // Î
"î", // î
"Ï", // Ï
"ï", // ï
"ø", // ø
"Ø", // Ø
"ö", // ö
"Ö", // Ö
"Ô", // Ô
"ô", // ô
"Õ", // Õ
"õ", // õ
"Œ", // Œ
"œ", // œ
"ü", // ü
"Ü", // Ü
"Ù", // Ù
"ù", // ù
"Û", // Û
"û", // û
"Ÿ", // Ÿ
"ÿ", // ÿ
"Ñ", // Ñ
"ñ", // ñ
"þ", // þ
"Þ", // Þ
"ý", // ý
"Ý", // Ý
"¿", // ¿
)), ENT_QUOTES, 'UTF-8');
$LINK_ICHARS = $LINK_ICHARS_DOMAIN . (string) html_entity_decode(implode("", array(
"ß", // ß
)), ENT_QUOTES, 'UTF-8');
$allowed_protocols = array('http', 'https', 'ftp', 'news', 'nntp', 'telnet', 'mailto', 'irc', 'ssh', 'sftp', 'webcal');
// Starting a parenthesis group with (?: means that it is grouped, but is not captured
$protocol = '((?:'. implode("|", $allowed_protocols) .'):\/\/)';
$authentication = "(?:(?:(?:[\w\.\-\+!$&'\(\)*\+,;=" . $LINK_ICHARS . "]|%[0-9a-f]{2})+(?::(?:[\w". $LINK_ICHARS ."\.\-\+%!$&'\(\)*\+,;=]|%[0-9a-f]{2})*)?)?@)";
$domain = '(?:(?:[a-z0-9' . $LINK_ICHARS_DOMAIN . ']([a-z0-9'. $LINK_ICHARS_DOMAIN . '\-_\[\]])*)(\.(([a-z0-9' . $LINK_ICHARS_DOMAIN . '\-_\[\]])+\.)*('. $LINK_DOMAINS .'|[a-z]{2}))?)';
$ipv4 = '(?:[0-9]{1,3}(\.[0-9]{1,3}){3})';
$ipv6 = '(?:[0-9a-fA-F]{1,4}(\:[0-9a-fA-F]{1,4}){7})';
$port = '(?::([0-9]{1,5}))';
// Pattern specific to external links.
$external_pattern = '/^'. $protocol .'?'. $authentication .'?('. $domain .'|'. $ipv4 .'|'. $ipv6 .' |localhost)'. $port .'?';
// Pattern specific to internal links.
$internal_pattern = "/^(?:[a-z0-9". $LINK_ICHARS ."_\-+\[\]]+)";
$internal_pattern_file = "/^(?:[a-z0-9". $LINK_ICHARS ."_\-+\[\]\.]+)$/i";
$directories = "(?:\/[a-z0-9". $LINK_ICHARS ."_\-\.~+%=&,$'#!():;*@\[\]]*)*";
// Yes, four backslashes == a single backslash.
$query = "(?:\/?\?([?a-z0-9". $LINK_ICHARS ."+_|\-\.~\/\\\\%=&,$'():;*@\[\]{} ]*))";
$anchor = "(?:#[a-z0-9". $LINK_ICHARS ."_\-\.~+%=&,$'():;*@\[\]\/\?]*)";
// The rest of the path for a standard URL.
$end = $directories .'?'. $query .'?'. $anchor .'?'.'$/i';
$message_id = '[^@].*@'. $domain;
$newsgroup_name = '(?:[0-9a-z+-]*\.)*[0-9a-z+-]*';
$news_pattern = '/^news:('. $newsgroup_name .'|'. $message_id .')$/i';
$user = '[a-zA-Z0-9'. $LINK_ICHARS .'_\-\.\+\^!#\$%&*+\/\=\?\`\|\{\}~\'\[\]]+';
$email_pattern = '/^mailto:'. $user .'@'.'(?:'. $domain .'|'. $ipv4 .'|'. $ipv6 .'|localhost)'. $query .'?$/';
if (strpos($text, '<front>') === 0) {
return false;
}
if (in_array('mailto', $allowed_protocols) && preg_match($email_pattern, $text)) {
return false;
}
if (in_array('news', $allowed_protocols) && preg_match($news_pattern, $text)) {
return false;
}
if (preg_match($internal_pattern . $end, $text)) {
return false;
}
if (preg_match($external_pattern . $end, $text)) {
return false;
}
if (preg_match($internal_pattern_file, $text)) {
return false;
}
return true;
}
সম্পাদনা করুন:
ঘটনাগুলি নির্দেশিত
হিসাবে এই কোডটি পিএইচপি 5.3.0 (২০০৯-০6-৩০) এর সাথে প্রকাশিত হয়েছে এবং সে অনুযায়ী ব্যবহার করা উচিত।
শুধু আমার দুটি সেন্ট কিন্তু আমি এই ফাংশনটি বিকাশ করেছি এবং সাফল্যের সাথে এটি কিছুক্ষণ ব্যবহার করছি। এটি ভাল নথিভুক্ত এবং পৃথক করা হয়েছে যাতে আপনি সহজেই এটিকে পরিবর্তন করতে পারেন।
// Checks if string is a URL
// @param string $url
// @return bool
function isURL($url = NULL) {
if($url==NULL) return false;
$protocol = '(http://|https://)';
$allowed = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)';
$regex = "^". $protocol . // must include the protocol
'(' . $allowed . '{1,63}\.)+'. // 1 or several sub domains with a max of 63 chars
'[a-z]' . '{2,6}'; // followed by a TLD
if(eregi($regex, $url)==true) return true;
else return false;
}
function is_valid_url ($url="") {
if ($url=="") {
$url=$this->url;
}
$url = @parse_url($url);
if ( ! $url) {
return false;
}
$url = array_map('trim', $url);
$url['port'] = (!isset($url['port'])) ? 80 : (int)$url['port'];
$path = (isset($url['path'])) ? $url['path'] : '';
if ($path == '') {
$path = '/';
}
$path .= ( isset ( $url['query'] ) ) ? "?$url[query]" : '';
if ( isset ( $url['host'] ) AND $url['host'] != gethostbyname ( $url['host'] ) ) {
if ( PHP_VERSION >= 5 ) {
$headers = get_headers("$url[scheme]://$url[host]:$url[port]$path");
}
else {
$fp = fsockopen($url['host'], $url['port'], $errno, $errstr, 30);
if ( ! $fp ) {
return false;
}
fputs($fp, "HEAD $path HTTP/1.1\r\nHost: $url[host]\r\n\r\n");
$headers = fread ( $fp, 128 );
fclose ( $fp );
}
$headers = ( is_array ( $headers ) ) ? implode ( "\n", $headers ) : $headers;
return ( bool ) preg_match ( '#^HTTP/.*\s+[(200|301|302)]+\s#i', $headers );
}
return false;
}
এটি। নেট স্ট্যাকওভারফ্লো প্রশ্নে অনুপ্রাণিত হয়েছে এবং সেই প্রশ্ন থেকে এই রেফারেন্স করা নিবন্ধে এই ইউআরআই ভ্যালিডেটর রয়েছে (ইউআরআই মানে এটি ইউআরএল এবং ইউআরএন উভয়কেই বৈধতা দেয়)।
if( ! preg_match( "/^([a-z][a-z0-9+.-]*):(?:\\/\\/((?:(?=((?:[a-z0-9-._~!$&'()*+,;=:]|%[0-9A-F]{2})*))(\\3)@)?(?=(\\[[0-9A-F:.]{2,}\\]|(?:[a-z0-9-._~!$&'()*+,;=]|%[0-9A-F]{2})*))\\5(?::(?=(\\d*))\\6)?)(\\/(?=((?:[a-z0-9-._~!$&'()*+,;=:@\\/]|%[0-9A-F]{2})*))\\8)?|(\\/?(?!\\/)(?=((?:[a-z0-9-._~!$&'()*+,;=:@\\/]|%[0-9A-F]{2})*))\\10)?)(?:\\?(?=((?:[a-z0-9-._~!$&'()*+,;=:@\\/?]|%[0-9A-F]{2})*))\\11)?(?:#(?=((?:[a-z0-9-._~!$&'()*+,;=:@\\/?]|%[0-9A-F]{2})*))\\12)?$/i", $uri ) )
{
throw new \RuntimeException( "URI has not a valid format." );
}
আমি এই ফাংশনটি সফলভাবে ইউনিট-টেস্ট করেছি যার Uri
দ্বারা নামকরণ এবং পরীক্ষিত একটি ভ্যালুওবজেক্ট তৈরি করেছি UriTest
।
<?php
declare( strict_types = 1 );
namespace XaviMontero\ThrasherPortage\Tests\Tour;
use XaviMontero\ThrasherPortage\Tour\Uri;
class UriTest extends \PHPUnit_Framework_TestCase
{
private $sut;
public function testCreationIsOfProperClassWhenUriIsValid()
{
$sut = new Uri( 'http://example.com' );
$this->assertInstanceOf( 'XaviMontero\\ThrasherPortage\\Tour\\Uri', $sut );
}
/**
* @dataProvider urlIsValidProvider
* @dataProvider urnIsValidProvider
*/
public function testGetUriAsStringWhenUriIsValid( string $uri )
{
$sut = new Uri( $uri );
$actual = $sut->getUriAsString();
$this->assertInternalType( 'string', $actual );
$this->assertEquals( $uri, $actual );
}
public function urlIsValidProvider()
{
return
[
[ 'http://example-server' ],
[ 'http://example.com' ],
[ 'http://example.com/' ],
[ 'http://subdomain.example.com/path/?parameter1=value1¶meter2=value2' ],
[ 'random-protocol://example.com' ],
[ 'http://example.com:80' ],
[ 'http://example.com?no-path-separator' ],
[ 'http://example.com/pa%20th/' ],
[ 'ftp://example.org/resource.txt' ],
[ 'file://../../../relative/path/needs/protocol/resource.txt' ],
[ 'http://example.com/#one-fragment' ],
[ 'http://example.edu:8080#one-fragment' ],
];
}
public function urnIsValidProvider()
{
return
[
[ 'urn:isbn:0-486-27557-4' ],
[ 'urn:example:mammal:monotreme:echidna' ],
[ 'urn:mpeg:mpeg7:schema:2001' ],
[ 'urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66' ],
[ 'rare-urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66' ],
[ 'urn:FOO:a123,456' ]
];
}
/**
* @dataProvider urlIsNotValidProvider
* @dataProvider urnIsNotValidProvider
*/
public function testCreationThrowsExceptionWhenUriIsNotValid( string $uri )
{
$this->expectException( 'RuntimeException' );
$this->sut = new Uri( $uri );
}
public function urlIsNotValidProvider()
{
return
[
[ 'only-text' ],
[ 'http//missing.colon.example.com/path/?parameter1=value1¶meter2=value2' ],
[ 'missing.protocol.example.com/path/' ],
[ 'http://example.com\\bad-separator' ],
[ 'http://example.com|bad-separator' ],
[ 'ht tp://example.com' ],
[ 'http://exampl e.com' ],
[ 'http://example.com/pa th/' ],
[ '../../../relative/path/needs/protocol/resource.txt' ],
[ 'http://example.com/#two-fragments#not-allowed' ],
[ 'http://example.edu:portMustBeANumber#one-fragment' ],
];
}
public function urnIsNotValidProvider()
{
return
[
[ 'urn:mpeg:mpeg7:sch ema:2001' ],
[ 'urn|mpeg:mpeg7:schema:2001' ],
[ 'urn?mpeg:mpeg7:schema:2001' ],
[ 'urn%mpeg:mpeg7:schema:2001' ],
[ 'urn#mpeg:mpeg7:schema:2001' ],
];
}
}
<?php
declare( strict_types = 1 );
namespace XaviMontero\ThrasherPortage\Tour;
class Uri
{
/** @var string */
private $uri;
public function __construct( string $uri )
{
$this->assertUriIsCorrect( $uri );
$this->uri = $uri;
}
public function getUriAsString()
{
return $this->uri;
}
private function assertUriIsCorrect( string $uri )
{
// /programming/30847/regex-to-validate-uris
// http://snipplr.com/view/6889/regular-expressions-for-uri-validationparsing/
if( ! preg_match( "/^([a-z][a-z0-9+.-]*):(?:\\/\\/((?:(?=((?:[a-z0-9-._~!$&'()*+,;=:]|%[0-9A-F]{2})*))(\\3)@)?(?=(\\[[0-9A-F:.]{2,}\\]|(?:[a-z0-9-._~!$&'()*+,;=]|%[0-9A-F]{2})*))\\5(?::(?=(\\d*))\\6)?)(\\/(?=((?:[a-z0-9-._~!$&'()*+,;=:@\\/]|%[0-9A-F]{2})*))\\8)?|(\\/?(?!\\/)(?=((?:[a-z0-9-._~!$&'()*+,;=:@\\/]|%[0-9A-F]{2})*))\\10)?)(?:\\?(?=((?:[a-z0-9-._~!$&'()*+,;=:@\\/?]|%[0-9A-F]{2})*))\\11)?(?:#(?=((?:[a-z0-9-._~!$&'()*+,;=:@\\/?]|%[0-9A-F]{2})*))\\12)?$/i", $uri ) )
{
throw new \RuntimeException( "URI has not a valid format." );
}
}
}
46 টি পরীক্ষায় 65 টি জোর দেওয়া হয়েছে। সতর্কতা: বৈধ জন্য 2 জন এবং ডেটা সরবরাহকারী অবৈধ এক্সপ্রেশন জন্য। একটি ইউআরএল এবং অন্যটি ইউআরএন এর জন্য। আপনি যদি v5.6 * বা তার আগের পিএইচপিউনাইটের একটি সংস্করণ ব্যবহার করে থাকেন তবে আপনাকে দুটি ডেটা সরবরাহকারীকে একটিতে যুক্ত করতে হবে।
xavi@bromo:~/custom_www/hello-trip/mutant-migrant$ vendor/bin/phpunit
PHPUnit 5.7.3 by Sebastian Bergmann and contributors.
.............................................. 46 / 46 (100%)
Time: 82 ms, Memory: 4.00MB
OK (46 tests, 65 assertions)
এই নমুনা ইউআরআই পরীক্ষকটিতে কোড-কভারেজের 100% রয়েছে।
"/(http(s?):\/\/)([a-z0-9\-]+\.)+[a-z]{2,4}(\.[a-z]{2,4})*(\/[^ ]+)*/i"
(http (গুলি?): //) এর অর্থ http: // বা https: //
([a-z0-9 -] +।) + => ২.০ [a-z0-9-] এর অর্থ কোনও অ্যাজ চরিত্র বা কোনও 0-9 বা (-) চিহ্ন
2.1 (+) means the character can be one or more ex: a1w,
a9-,c559s, f)
2.2 \. is (.)sign
2.3. the (+) sign after ([a-z0-9\-]+\.) mean do 2.1,2.2,2.3
at least 1 time
ex: abc.defgh0.ig, aa.b.ced.f.gh. also in case www.yyy.com
3.[a-z]{2,4} mean a-z at least 2 character but not more than
4 characters for check that there will not be
the case
ex: https://www.google.co.kr.asdsdagfsdfsf
4.(\.[a-z]{2,4})*(\/[^ ]+)* mean
4.1 \.[a-z]{2,4} means like number 3 but start with
(.)sign
4.2 * means (\.[a-z]{2,4})can be use or not use never mind
4.3 \/ means \
4.4 [^ ] means any character except blank
4.5 (+) means do 4.3,4.4,4.5 at least 1 times
4.6 (*) after (\/[^ ]+) mean use 4.3 - 4.5 or not use
no problem
use for case https://stackoverflow.com/posts/51441301/edit
5. when you use regex write in "/ /" so it come
" /( http ( s?)? ) / আমি "
6. almost forgot: letter i on the back mean ignore case of
Big letter or small letter ex: A same as a, SoRRy same
as sorry.
দ্রষ্টব্য: খারাপ ইংরেজির জন্য দুঃখিত আমার দেশ এটি ভাল ব্যবহার করে না।
ঠিক আছে, সুতরাং এটি কিছুটা আরও জটিল তবে সাধারণ রেজেেক্স, তবে এটি বিভিন্ন ধরণের ইউআরএলকে অনুমতি দেয়।
উদাহরণ:
যা যা বৈধ হিসাবে চিহ্নিত করা উচিত।
function is_valid_url($url) {
// First check: is the url just a domain name? (allow a slash at the end)
$_domain_regex = "|^[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*(\.[A-Za-z]{2,})/?$|";
if (preg_match($_domain_regex, $url)) {
return true;
}
// Second: Check if it's a url with a scheme and all
$_regex = '#^([a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))$#';
if (preg_match($_regex, $url, $matches)) {
// pull out the domain name, and make sure that the domain is valid.
$_parts = parse_url($url);
if (!in_array($_parts['scheme'], array( 'http', 'https' )))
return false;
// Check the domain using the regex, stops domains like "-example.com" passing through
if (!preg_match($_domain_regex, $_parts['host']))
return false;
// This domain looks pretty valid. Only way to check it now is to download it!
return true;
}
return false;
}
মনে রাখবেন যে প্রোটোকলগুলি আপনি অনুমতি দিতে চান তার জন্য একটি ইন-অ্যারে চেক রয়েছে (বর্তমানে কেবলমাত্র এইচটিপি এবং https সেই তালিকায় রয়েছে)।
var_dump(is_valid_url('google.com')); // true
var_dump(is_valid_url('google.com/')); // true
var_dump(is_valid_url('http://google.com')); // true
var_dump(is_valid_url('http://google.com/')); // true
var_dump(is_valid_url('https://google.com')); // true
আমার পক্ষে কাজ করা সেরা ইউআরএল রেজেজ:
function valid_URL($url){
return preg_match('%^(?:(?: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', $url);
}
উদাহরণ:
valid_URL('https://twitter.com'); // true
valid_URL('http://twitter.com'); // true
valid_URL('http://twitter.co'); // true
valid_URL('http://t.co'); // true
valid_URL('http://twitter.c'); // false
valid_URL('htt://twitter.com'); // false
valid_URL('http://example.com/?a=1&b=2&c=3'); // true
valid_URL('http://127.0.0.1'); // true
valid_URL(''); // false
valid_URL(1); // false
সূত্র: http://urlregex.com/
পিটারের রেজেক্স অনেক কারণে আমার কাছে ঠিক দেখাচ্ছে না। এটি ডোমেন নামে সমস্ত ধরণের বিশেষ অক্ষরকে মঞ্জুরি দেয় এবং অনেকের জন্য পরীক্ষা করে না।
ফ্র্যাঙ্কির ফাংশনটি আমার কাছে ভাল লাগছে এবং আপনি যদি কোনও ফাংশন না চান তবে আপনি উপাদানগুলি থেকে একটি ভাল রেজেক্স তৈরি করতে পারেন:
^(http://|https://)(([a-z0-9]([-a-z0-9]*[a-z0-9]+)?){1,63}\.)+[a-z]{2,6}
অনির্ধারিত তবে আমি মনে করি এটি কাজ করা উচিত।
এছাড়াও, ওউনের উত্তর 100% এর মতো দেখায় না। আমি Regex ডোমেইনের অংশ নেন এবং Regex পরীক্ষক টুলে এটা পরীক্ষিত http://erik.eae.net/playground/regexp/regexp.html
আমি নিম্নলিখিত লাইনটি রেখেছি:
(\S*?\.\S*?)
"regexp" বিভাগ এবং নিম্নলিখিত লাইনে:
-hello.com
"নমুনা পাঠ্য" বিভাগের অধীনে।
ফলাফলটি বিয়োগ চরিত্রের মধ্য দিয়ে যেতে পেরেছিল। কারণ \ এস এর অর্থ কোনও স্থান ছাড়ানো অক্ষর।
দ্রষ্টব্য ফ্র্যাঙ্কির থেকে রেজেক্সটি বিয়োগটি পরিচালনা করে কারণ এটি প্রথম চরিত্রের জন্য এই অংশটি রয়েছে:
[a-z0-9]
যা বিয়োগ বা অন্য কোনও বিশেষ চরিত্রকে অনুমতি দেবে না।
এখানে আমি এটি করেছি is তবে আমি মেন্টাইন করতে চাই যে আমি রেইজেক্স সম্পর্কে এতটা শিউর নই। তবে এটি আপনার কাজ করা উচিত :)
$pattern = "#((http|https)://(\S*?\.\S*?))(\s|\;|\)|\]|\[|\{|\}|,|”|\"|'|:|\<|$|\.\s)#i";
$text = preg_replace_callback($pattern,function($m){
return "<a href=\"$m[1]\" target=\"_blank\">$m[1]</a>$m[4]";
},
$text);
এইভাবে আপনার প্যাটার্নে আপনাকে খ্রিষ্ট চিহ্নিতকারী লাগবে না।
আশা করি এটা সাহায্য করবে :)
এখানে RegEx ব্যবহার করে ইউআরএল বৈধকরণের জন্য একটি সাধারণ ক্লাস এবং তারপরে জনপ্রিয় আরবিএল (রিয়েলটাইম ব্ল্যাকহোল তালিকা) সার্ভারের বিরুদ্ধে ডোমেনটি ক্রস-রেফারেন্স করে:
ইনস্টল করুন:
require 'URLValidation.php';
ব্যবহার:
require 'URLValidation.php';
$urlVal = new UrlValidation(); //Create Object Instance
domain()
পদ্ধতির পরামিতি হিসাবে একটি URL যুক্ত করুন এবং রিটার্নটি পরীক্ষা করুন।
$urlArray = ['http://www.bokranzr.com/test.php?test=foo&test=dfdf', 'https://en-gb.facebook.com', 'https://www.google.com'];
foreach ($urlArray as $k=>$v) {
echo var_dump($urlVal->domain($v)) . ' URL: ' . $v . '<br>';
}
আউটপুট:
bool(false) URL: http://www.bokranzr.com/test.php?test=foo&test=dfdf
bool(true) URL: https://en-gb.facebook.com
bool(true) URL: https://www.google.com
আপনি উপরে দেখতে পারেন, www.bokranzr.com একটি আরবিএলের মাধ্যমে দূষিত ওয়েবসাইট হিসাবে তালিকাভুক্ত হয়েছে যাতে ডোমেনটি মিথ্যা হিসাবে ফিরে আসে।
ওয়ার্ডপ্রেসের সাথে বিকাশকারী যে কেউ, কেবল ব্যবহার করুন
esc_url_raw($url) === $url
একটি ইউআরএল যাচাই করতে ( এখানে ওয়ার্ডপ্রেস 'ডকুমেন্টেশন অনesc_url_raw
)। এটা তোলে URL গুলি অনেক বেশী ভালো পরিচালনা filter_var($url, FILTER_VALIDATE_URL)
করা হয়েছে কারণ এটি হয় ইউনিকোড এবং পদ্ধতি এটা XSS-নিরাপদ। ( এখানে সমস্ত সমস্যার উল্লেখ করে একটি ভাল নিবন্ধ দেওয়া হয়েছেfilter_var
)।
এর জন্য একটি পিএইচপি নেটিভ ফাংশন রয়েছে:
$url = 'http://www.yoururl.co.uk/sub1/sub2/?param=1¶m2/';
if ( ! filter_var( $url, FILTER_VALIDATE_URL ) ) {
// Wrong
}
else {
// Valid
}
ফিল্টার ডেটা, বা ফিল্টার ব্যর্থ হলে FALSE প্রদান করে।