Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何验证此格式的字符串:p[1个或多个数字]?_Php_Regex_String - Fatal编程技术网

Php 如何验证此格式的字符串:p[1个或多个数字]?

Php 如何验证此格式的字符串:p[1个或多个数字]?,php,regex,string,Php,Regex,String,我想验证以下形式的字符串: $string = 'p123455... 有效:p1、p22、p54342534535 无效:p、pp45、p543p、4p5232、q34 (第一个字符必须是“p”,其他字符必须是1个或多个数字) 我的尝试: $valid = true; if($string[0] != 'p') $valid = false; $string = substr($string, 1); if(!is_numeric($string) $valid =

我想验证以下形式的字符串:

$string = 'p123455...
  • 有效:p1、p22、p54342534535
  • 无效:p、pp45、p543p、4p5232、q34
(第一个字符必须是“p”,其他字符必须是1个或多个数字)

我的尝试:

$valid = true;

if($string[0] != 'p')
    $valid = false;

$string = substr($string, 1);

if(!is_numeric($string)
    $valid = flase;

if($valid)
    echo 'string is valid.';

但是有没有一种更短更快的方法呢?

您可以使用一个简单的正则表达式一次性进行验证:

if(preg_match("/^p\d+$/", $string)){
    //valid
} else {
    //not valid
}
正则表达式解释:

  • ^字符串开头的锚定
  • pp
  • \d匹配所有数字(
    0-9
    • +量词:匹配1次或多次
  • $字符串末尾的锚定
使用预匹配()

我猜第二个if语句中缺少的
只是一个输入错误。
$string = "p12345678";
if(preg_match('/^p[0-9]+$/',$string)) {
  echo "Valid";
} else {
  echo "Invalid";
}