繁体   English   中英

使用正则表达式检查字符串格式

[英]Check string format with regular expression

我需要使用php检查来自ajax帖子的字符串,特别是源是具有以下格式的文本区域:

[minute]:[price]
[minute]:[price]
[minute]:[price]

例:

10:20
12:22.23
20:30.1

等等,分钟是一个整数,价格可能是0到2位小数的浮点数(10,10.0,10.00很好),我只能用一种简单的方式检查它们:double explode(“\\ n “和”:“)和is_number +浮动在子元素上,但它看起来很不方便,有人可以建议我使用preg_match的表达式吗?

preg_match(/\d{1,}:\d{1,}([.][0-9]{1,})?/s);

这可能是你想要的:

$re = '/[\d]{1,2}\:[\d]{1,2}(?:\.[\d]{1,2})?/m';
$str = "12:22\n12:22.23\n12:22.23";

preg_match_all($re, $str, $matches); //This catch only correct values

echo "<pre>";
foreach($matches[0] as $value){
  $split = explode(":", $value);
  $minute = intval($split[0]);
  $price = floatval($split[1]);

  echo "minute -> " . $minute . " value -> " . $price . "\n";
}

表达式/[\\d]{1,2}\\:[\\d]{1,2}(?:\\.[\\d]{1,2})?/m捕捉模式如12:12.12 请参阅Regex101示例

preg_match_all($ pattern,$ subject,$ matches)执行全局正则表达式匹配并将匹配项放入$ matches数组中。

intval($split[0]);floatval(split[1]); 将确保值的格式正确。

看完答案后:

/^(\d){1,}?\:(\d){1,}(?:\.(\d){1,2})?$/mi

这个功能完整:

preg_match_all(' /^(\d){1,}?\:(\d){1,}(?:\.(\d){1,2})?$/mi', $_POST['ratetable'], $out);
if($out[0]!=explode("\n",$_POST['ratetable'])){
    header('Content-Type: application/json; charset=utf-8');
    echo json_encode(array(0=>'Invalid price table at line: '.implode(", ", array_diff_key(array_flip(explode("\n",$_POST['ratetable'])),array_flip($out[0])))));
    exit();
}
^\d+:\d+(\.\d{1,2})?$

在:

if(preg_match("/^\d+:\d+(\.\d{1,2})?$/", $str))
{
    echo "Valid input!";
}

现场演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM