[英]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.