正则表达式验证用户注册信息

当前位置:首页 » 学习
In 学习  @2015-11-08

正则表达式记起来有点头疼,一般用来匹配一些具有特征的字符,如:URL网址,IP地址,电话号码,邮箱地址,同时也能进行批量替换修改或者提取满足特征要求的字符串,用好了很强大,为了熟练掌握,还得多多使用才行。这里是一个简单的用来验证用户注册信息的代码,包括用户名,邮箱和手机号码。

<?php
$user = array(
    'name' => 'admin999',
    'email' => 'admin@m1910.com',
    'mobile' => '13812345678'
);
//进行一般性验证
if (empty($user)) {
    die('用户信息不能为空');
}
if (strlen($user['name']) < 6) {
    die('用户名长度最少为6位');
}
//用户名必须为字母、数字与下划线
if (!preg_match('/^\w+$/i', $user['name'])) {
    die('用户名不合法');
}
//验证邮箱格式是否正确
if (!preg_match('/^[\w\.]+@\w+\.\w+$/i', $user['email'])) {
    die('邮箱不合法');
}
//手机号必须为11位数字,且为1开头
if (!preg_match('/^1\d{10}$/i', $user['mobile'])) {
    die('手机号不合法');
}
echo '用户信息验证成功';
?>
标签: ,   评论: 4枚 

PHP调试配置Eclipse PDT + XDebug

当前位置:首页 » 学习
In 学习  @2015-11-07

环境Eclipse PDT+XDebug

由于我之前已经为JAVAAndroid配置好了Eclipse,就不用下载Zend Studio了,本文针对使用Eclipse PDT构建开发PHP环境的用户。
PHP的开发环境Eclipse PDT的安装很简单:
help——Install New Software——选择--All Available Sites--——在Web,XML,Java EE and OSGi Enterprise Development里找到PHP Development Tools (PDT)安装,安装按成后重启Eclipse即可。

然后我们来看看怎么为Eclipse配置调试程序XDebug,使PHP程序可以像JAVA程序一样在Eclipse下方便的进行断点调试等。

1.修改php.ini

首先Wamp安装的时候已经给我们集成了XDebugdll文件,如果没有集成的话你需要到在XDebug的官网去下载这个文件;
我的php.ini中搜索xdebug可以看到:

; XDEBUG Extension

zend_extension = "E:/wamp/bin/php/php5.5.12/zend_ext/php_xdebug-2.2.5-5.5-vc11-x86_64.dll"
;
[xdebug]
xdebug.remote_enable = off
xdebug.profiler_enable = off
xdebug.profiler_enable_trigger = off
xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.profiler_output_dir = "E:/wamp/tmp"
xdebug.show_local_vars=0

这里面zend_extension后面的路径就是你下载的dll文件的那个路径;
将这个xdebug.remote_enable = off修改为xdebug.remote_enable = 1
更多配置,根据需要来添加:

;开启自动跟踪  
xdebug.auto_trace = 1 
;开启异常跟踪  
xdebug.show_exception_trace = 1 
;开启异常跟踪  
xdebug.remote_autostart = 1 
;收集变量  
xdebug.collect_vars = 1 
;收集参数  
xdebug.collect_params = 1 
;trace输出路径  
xdebug.trace_output_dir="C:/xdebug" 
;以下三个分别是主机、端口、句柄 
xdebug.remote_host="localhost" 
xdebug.remote_port=9000  
xdebug.remote_handler="dbgp"

保存文件,重启服务器,查看phpinfo();
会看到以下信息:
phpinfo()信息xdebug
phpinfo()信息xdebug
说明XDebug功能已经开启。

2.配置Eclipse

以下配置都在Window——Preferences下进行
2.1. 在PHP——PHP Executablesadd一个配置如下:
PHP Executables
PHP Executables

2.2. 在PHP——Debug下修改配置如下:
PHP——Debug

2.3. 在PHP——Servers下修改配置如下:
因为我使用的是8080端口,所以这里根据本地Apache服务器的httpd.conf文件内设置的端口号来配置。
php——servers

至此,在Eclipse中配置XDebug调试环境就完成了,如有疑问,请留言。

标签: , , ,   评论: PHP调试配置Eclipse PDT + XDebug已关闭评论 

错误:java.lang.IllegalArgumentException: Service not registered

当前位置:首页 » 学习
In 学习, 笔记  @2015-08-20

问题

在做Service的绑定和解绑小项目测试的时候,绑定成功,解绑也成功,但是如果解除绑定后再点击给解除绑定的指令(项目中就是点击按钮解除绑定),会报这个错误:

AndroidRuntime(7090): java.lang.IllegalArgumentException: Service not registered: 
com.m1910.servicetest.MainActivity$1@41ddfcc0

错误提示Service没有注册,事实上我在Manifest.xml中已经注册过这个Service了。

修改前代码:

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.start_service:
            Intent startIntent = new Intent(this, MyService.class);
            startService(startIntent);// 启动服务
            break;
        case R.id.stop_service:
            Intent stopIntent = new Intent(this, MyService.class);
            stopService(stopIntent);// 停止服务
            break;
        case R.id.bind_service:
            Intent bindIntent = new Intent(this, MyService.class);
                        // 绑定服务
            bindService(bindIntent, connection, BIND_AUTO_CREATE);
            break;
        case R.id.unbind_service:
            unbindService(connection);// 解绑服务   
            break;
        default:
            break;
        }
    }

原因

查询官方文档中关于unbindService()这个方法的介绍:

public abstract void unbindService (ServiceConnection conn)

Added in API level 1
Disconnect from an application service. You will no longer receive calls as the service is restarted, and the service is now allowed to stop at any time.

Parameters
conn    The connection interface previously supplied to bindService(). This parameter must not be null.

最后一句看到这个传入的conn参数不能为null,也就是必须有绑定存在,才能解绑,小项目中绑定成功后第一次点击解绑不会报错,解绑后这个参数就是null了,再次点击解绑就会报错,那么我们为解绑加一个判断就可以了。

修改后代码如下:

private boolean isBound = false;

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.start_service:
            Intent startIntent = new Intent(this, MyService.class);
            startService(startIntent);// 启动服务
            break;
        case R.id.stop_service:
            Intent stopIntent = new Intent(this, MyService.class);
            stopService(stopIntent);// 停止服务
            break;
        case R.id.bind_service:
            Intent bindIntent = new Intent(this, MyService.class);
                        // 绑定服务
            isBound = bindService(bindIntent, connection, BIND_AUTO_CREATE);
            break;
        case R.id.unbind_service:
            if (isBound) {
                unbindService(connection);// 解绑服务
                isBound = false;
            }
            break;
        default:
            break;
        }
    }

网上也有人用getApplicationContext().unbindService(mConnection);这样来做,什么意思我也不太懂,不过最终效果一样也是要加一个是否为空的判断。