From 0851669b39db770e62374551c9394f0f3a652314 Mon Sep 17 00:00:00 2001
From: Friendika <info@friendika.com>
Date: Sun, 14 Nov 2010 00:32:31 -0800
Subject: [PATCH] clean up some regex's for i18n, and eliminate old ereg
 patterns.

---
 INSTALL          |  3 +--
 boot.php         |  9 ++++++++-
 mod/invite.php   |  7 ++++---
 mod/register.php | 15 +++++++++------
 mod/settings.php |  4 ++--
 5 files changed, 24 insertions(+), 14 deletions(-)

diff --git a/INSTALL b/INSTALL
index b2b1a703a5..624333e906 100644
--- a/INSTALL
+++ b/INSTALL
@@ -7,8 +7,7 @@ local .htaccess file
 
 	- PHP > 5.1. The later the better. You'll need 5.3 for full openssl 
 encryption support
-
-	- PHP *command line* access with register_argc_argv set to true in the 
+		- PHP *command line* access with register_argc_argv set to true in the 
 php.ini file
 
 	- Mysql 5.x
diff --git a/boot.php b/boot.php
index 948cca46dc..ad1df4ed13 100644
--- a/boot.php
+++ b/boot.php
@@ -736,7 +736,7 @@ function hex2bin($s) {
 if(! function_exists('paginate')) {
 function paginate(&$a) {
 	$o = '';
-	$stripped = ereg_replace("(&page=[0-9]*)","",$_SERVER['QUERY_STRING']);
+	$stripped = preg_replace('/(&page=[0-9]*)/','',$_SERVER['QUERY_STRING']);
 	$stripped = str_replace('q=','',$stripped);
 	$stripped = trim($stripped,'/');
 	$url = $a->get_baseurl() . '/' . $stripped;
@@ -1444,3 +1444,10 @@ function search($s) {
 	return $o;
 }}
 
+if(! function_exists('valid_email')) {
+function valid_email($x){
+	if(preg_match('/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)+$/',$x))
+		return true;
+	return false;
+}}
+
diff --git a/mod/invite.php b/mod/invite.php
index 3f9efc5742..fe706a5244 100644
--- a/mod/invite.php
+++ b/mod/invite.php
@@ -17,12 +17,13 @@ function invite_post(&$a) {
 
 		$recip = trim($recip);
 
-		if(!eregi('[A-Za-z0-9._%-]+@[A-Za-z0-9._%-]+\.[A-Za-z]{2,6}', $recip)) {
-	                notice(  $recip . t(' : ') . t('Not a valid email address.') . EOL);
+		if(! valid_email($recip)) {
+			notice(  $recip . t(' : ') . t('Not a valid email address.') . EOL);
 			continue;
 		}
 
-                $res = mail($recip, t('Please join my network on ') . $a->config['sitename'], $message, "From: " . $a->user['email']);
+		$res = mail($recip, t('Please join my network on ') . $a->config['sitename'], 
+			$message, "From: " . $a->user['email']);
 		if($res) {
 			$total ++;
 		}
diff --git a/mod/register.php b/mod/register.php
index 99823f4513..a0a5e5c284 100644
--- a/mod/register.php
+++ b/mod/register.php
@@ -46,7 +46,7 @@ function register_post(&$a) {
 
 	// TODO fix some of these regex's for int'l/utf-8.
 
-	if(!eregi('[A-Za-z0-9._%-]+@[A-Za-z0-9._%-]+\.[A-Za-z]{2,6}',$email))
+	if(! valid_email($email))
 		$err .= t(' Not a valid email address.');
 	if(strlen($username) > 48)
 		$err .= t(' Please use a shorter name.');
@@ -55,19 +55,22 @@ function register_post(&$a) {
 
 	// I don't really like having this rule, but it cuts down
 	// on the number of auto-registrations by Russian spammers
+	
+	$no_utf = get_config('system','no_utf');
 
-	if(! preg_match("/^[a-zA-Z]* [a-zA-Z]*$/",$username))
-		$err .= t(' That doesn\'t appear to be your full name.');
+	$pat = (($no_utf) ? '/^[a-zA-Z]* [a-zA-Z]*$/' : '/^\p{L}* \p{L}*$/u' ); 
 
-	if(!eregi('[A-Za-z0-9._%-]+@[A-Za-z0-9._%-]+\.[A-Za-z]{2,6}',$email))
-                	$err .= t(' Not valid email.');
+	$loose_reg = get_config('system','no_regfullname');
+
+	if((! $loose_reg) && (! preg_match($pat,$username)))
+		$err .= t(' That doesn\'t appear to be your full name.');
 
 	if(! allowed_email($email))
 			$err .= t(' Your email domain is not among those allowed on this site.');
 
 	$nickname = strtolower($nickname);
 	if(! preg_match("/^[a-z][a-z0-9\-\_]*$/",$nickname))
-		$err .= t(' Nickname <strong>must</strong> start with a letter and contain only letters, numbers, dashes, or underscore.') ;
+		$err .= t(' Your "nickname" can only contain "a-z", "0-9", "-", and "_", and must also begin with a letter.');
 	$r = q("SELECT `uid` FROM `user`
                	WHERE `nickname` = '%s' LIMIT 1",
                	dbesc($nickname)
diff --git a/mod/settings.php b/mod/settings.php
index eab4ac52e7..0687a498f2 100644
--- a/mod/settings.php
+++ b/mod/settings.php
@@ -86,8 +86,8 @@ function settings_post(&$a) {
 
 	if($email != $a->user['email']) {
 		$email_changed = true;
-        	if(!eregi('[A-Za-z0-9._%-]+@[A-Za-z0-9._%-]+\.[A-Za-z]{2,6}',$email))
-                	$err .= t(' Not valid email.');
+        if(! valid_email($email))
+			$err .= t(' Not valid email.');
 	}
 
 	if(strlen($err)) {
-- 
2.39.5