2012-03-30 45 views
1

我有一个PHP两个字符串我想让以下检查在分化字母数字和字母在PHP

1) 4f74adce2a4d2  - contains ***alphanumerics*** 

2) getAllInfo   - contains ***only alphabetic*** 

检查这个我写了一个功能,但任何价值$ PK包含上述中,成果转化 如此而已,但i want to differentiate between alphanumeric and alphabetic only

<?php 
if (ereg('[A-Za-z^0-9]', $pk)) { 
    return true; 
} else if (ereg('[A-Za-z0-9]', $pk)) { 
    return false; 
} 
?> 
+4

你也可以看看这个扩展:http://php.net/ctype – mishu 2012-03-30 14:57:33

+1

al所以pcre建议http://php.net/pcre – mishu 2012-03-30 14:59:01

+1

扩大点@mishu使这些ctype功能看起来更具体http://www.php.net/manual/en/function.ctype-alnum.php http://www.php.net/manual/en/function.ctype-alpha.php – martynthewolf 2012-03-30 15:01:03

回答

3

使用以下两个函数来检测变量是否为alhpanumeric或字母:

// Alphabetic 
if(ctype_alpha($string)){ 
    // This is Alphabetic 
} 

// Alphanumeric 
if(ctype_alnum($string)){ 
    // This is Alphanumeric 
} 

访问此链接的参考指南:用于字母http://php.net/manual/en/book.ctype.php

0

对于aphanumeric:

function isAlphaNumeric($str) { 
    return !preg_match('/[^a-z0-9]/i', $str); 
} 

仅限字母:

function isAlpha($str) { 
    return !preg_match('/[^a-z]/i', $str); 
} 
+1

为什么不只是'返回preg_match('/ [a-zA-Z] /',$ str)'?另外,当我们有'i'说明符时,为什么还要在一个组中定义大写和小写字符? – J0HN 2012-03-30 15:00:50

+0

我已经添加了'i'说明符。返回preg_match将正常工作(在它之前有一个'!',所以如果它找到不是字母/字母数字的字符,它将返回false)。 – 2012-03-30 15:06:20

+0

是的,但负面小组赛比正面表现较差。所以你的解决方案是正确的,但具有较小的性能。 – J0HN 2012-03-30 15:10:50

2

如果您放置一个插入符(^),除了它当作普通字符中第一个字符组([])内的任意位置。所以,你的第一个正则表达式匹配甚至

466^qwe^aa 
11123asdasd^aa 
aaa^aaa 
^^^ 

这不是我的意图。只要删除插入符号和0-9,所以你的第一个正则表达式只是[A-Za-z]。这意味着'匹配任何字符,没有别的'。

UPDATE另外,如Ben Carey指出,使用内置的ctype扩展可以实现相同的效果。

+0

这是正确的,但为什么在内置插件时使用自定义函数? – 2012-03-30 15:05:47

+0

@Ben,你可能会错过答案。我没有使用任何自定义功能:) – J0HN 2012-03-30 15:08:42

+0

你已经正确回答了这个问题,但是我唯一的评论就是,你还没有建议一个更简单的选项。以上是正确的,但如果他使用ctype扩展名,解决方案会更容易。你不同意吗? – 2012-03-30 15:11:40

2

Unicode属性是\pL和用于数字\pN

if (preg_match('/^\pL+$/', $pk) return true; // alphabetic 
if (preg_match('/^[\pL\pN]+$/', $pk) return false; // alphanumeric