检查输入包含使用单个正则表达式

时间:2016-02-08 11:02:03

标签: php regex

我有一个函数,如果输入是纯数字或alphabate,它将返回true,否则它将返回false。这个功能工作正常。

function checktype($a)
{
    if (preg_match('/^\d+$/', $a)) { //check numeric (can use other numeric regex also like /^[0-9]+$/ etc)
        $return = true;
    } else if (preg_match('/^[a-zA-Z]+$/', $a)) { //check alphabates
        $return = true;
    } else { //others
        $return = false;
    }
    return $return;
}

var_dump(checktype('abcdfekjh')); //bool(true)
var_dump(checktype('1324654')); //bool(true)
var_dump(checktype('1324654hkjhkjh'));//bool(false)

不,我试图通过删除条件来优化此功能,因此我将代码修改为:

function checktype($a)
{
    $return  = (preg_match('/^\d+$/', $a) || preg_match('/^[a-zA-Z]+$/', $a)) ? true:false;
    return $return;
}

var_dump(checktype('abcdfekjh')); //bool(true)
var_dump(checktype('1324654')); //bool(true)
var_dump(checktype('1324654hkjhkjh'));//bool(false)

现在我已经尝试在单个正则表达式中合并两个正则表达式,因此我可以避免使用两个preg_match函数并且卡在这里:

function checktype($a)
{
    return (preg_match('regex to check either numeric or alphabates', $a)) ? true:false;
}

我使用OR(!)运营商使用not operator(?!)尝试了2天后的很多组合,但都没有成功。

在一些参考网站下面,我从中选择表达并做了一些组合:

http://regexlib.com/UserPatterns.aspx?authorid=26c277f9-61b2-4bf5-bb70-106880138842

http://www.rexegg.com/regex-conditionals.html

OR condition in Regex

Regex not operator(了解NOT运算符)

https://www.google.co.in/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=regular+expression+not+condition(了解NOT运算符)

所以这里的主要问题是,是否有任何单个正则表达式模式来检查字符串是否包含纯数值或纯字母?

  

注意:替代解决方案可以检查字符串是否为字母数字,然后相应地返回truefalse。也可以使用像is_numericis_string这样的php内置函数,但我更好奇地知道单个正则表达式模式来检查天气字符串是纯数字数字还是纯alphaba数字。

1 个答案:

答案 0 :(得分:3)

一个正则表达式,用于检查字符串是全部ASCII数字还是所有ASCII字母

'/^(?:\d+|[a-zA-Z]+)$/'

请参阅regex demo

这个正则表达式有两个你的regexp没有的东西:

  • 分组构造(?:....)
  • 交替运营商|

<强>解释

  • ^ - 字符串开头
  • (?:\d+ - 一个或多个数字
  • | - 或......
  • [a-zA-Z]+) - 一个或多个ASCII字母
  • $ - 字符串结尾

如果您需要使其支持Unicode,请使用[\p{L}\p{M}]代替[a-zA-Z](和\p{N}代替\d,但不是必需的)并使用{{ 1}}修饰符:

/u

如果您想从头到尾真正检查,请使用

'/^(?:\p{N}+|[\p{L}\p{M}]+)$/u'

'/\A(?:\p{N}+|[\p{L}\p{M}]+)\z/u'
  ^^                        ^^

'/^(?:\p{N}+|[\p{L}\p{M}]+)$/Du' 没有$修饰符与“非常结束”的字符串不匹配,如果在最后一个字符后面有换行符,它也会匹配。