仅允许使用11或16个字母数字字符PHP

时间:2015-11-10 04:15:56

标签: php regex

如何获得仅包含最多11或16个正则表达式字符的字符串?

Y_asof = Y.sort('Date').apply(lambda x: x.asof(X.index))

如果是数字,最大长度为16位, 如果是字母数字,最大长度为11个字符

例如:数字= 0825551234

例如:字母数字= 1800House

5 个答案:

答案 0 :(得分:3)

您应该更新您的问题,而不是在评论中概述其余的要求。根据我的阅读,试试这个:/^[a-zA-Z0-9]{5,16}$/

字母数字,最少5个字符,最多16个字符重复。

答案 1 :(得分:2)

我是Regexp的新手,但对我而言,这是你问题的答案

if(preg_match("/^\d{1,16}$/", "12345678123456781") == 1)
{
echo "Numeric";
}
else if(preg_match("/^([\w\_]{1,11})$/", "qweqweqweqwe") == 1)
{
echo "Alphanumeric";
}
else
{
echo("some other stuff");
}

如果您不想转义下划线,只需将第二个正则表达式替换为此/^(\w{1,11})$/

答案 2 :(得分:1)

  

如果是数字,最大长度为16位,如果为字母数字,则为最大值   长度为11个字符

这应该这样做:

<?php

//$string="0123456789012345";/* 16 digits */
$string="012345abcde";       /* 11 alpha-numeric */

if( preg_match("/^[0-9]{1,16}$|^(?=.*[a-zA-Z])[a-zA-Z0-9]{1,11}$/", $string) )
{
  echo 'valid Characters';
}
else
{
  echo 'Invalid characters';
}

质量保证:https://3v4l.org/1c2KD

祝你好运!

答案 3 :(得分:1)

        if(ctype_digit($this->smsSenderId) && strlen($this->smsSenderId) > 16){
         //'too long (maximum is 16 numeric characters)';
        }
        // alpha numeric can contain 11 characters
        else if(strlen($this->smsSenderId) > 11){
            //'too long (maximum is 11 alpha-numeric characters)';
        }
        else if(!preg_match("/^[0-9a-zA-Z]{4,11}$/", $this->smsSenderId) == 1){
            //'Invalid characters. Eg: 0825551234 or 1800House';
        }

答案 4 :(得分:1)

你可以在不使用正则表达式的情况下完成。

$strings = array('0825551234', '1800House', '111111111111111', 'aaaaaaaaaaa', '12!1adfas');
foreach($strings as $string){
echo "Testing for: $string";
if((is_numeric($string) && strlen($string) <=16) || (ctype_alnum($string) && strlen($string) <=11)) {
     echo ' true' . "\n";
} else {
     echo ' false' . "\n";
}
}

输出:

Testing for: 0825551234 true
Testing for: 1800House true
Testing for: 111111111111111 true
Testing for: aaaaaaaaaaa true
Testing for: 12!1adfas false

或者如果你需要正则表达式:

$strings = array('0825551234', '1800House', '11122111111111111', 'aaaaaaaaaaa', '12!1adfas');
foreach($strings as $string){
echo "Testing for: $string";
if(preg_match('~^(\d{1,16}|[a-z0-9]{1,11})$~i', $string)) {
     echo ' true' . "\n";
} else {
     echo ' false' . "\n";
}
}

Regex101演示:https://regex101.com/r/mN1aF8/1