我有这个字符串:“ 20加1000并不是20000。”
我想让第一个数字的位置大于10000。
我实际上(出于不同的目的)使用this第一答案代码来获取字符串中第一个数字的位置:
function firstNumPos($text){
preg_match('/^\D*(?=\d)/', $text, $m);
return isset($m[0]) ? strlen($m[0]) : false;
}
但是它不能区分数字大小,因此,该函数缺少第一个大于10000的数字的位置是什么?
欢迎使用任何解决方案,而不必使用该功能。
答案 0 :(得分:1)
您可以使用正则表达式获取所有数字,然后对其进行循环查找第一个大于10000的数字。
function getNumberPosition($text, $min = 10000){
preg_match_all('!\d+!', $text, $matches);
foreach ($matches[0] as $match) {
if ($match >= $min) {
return strpos($text, $match);
}
}
}
echo getNumber('20 plus 1000 is not 20000.');
答案 1 :(得分:1)
<clipPath>
答案 2 :(得分:1)
如果我没有误解您的问题,那么您可以尝试这种方式而无需使用任何花哨的正则表达式,让我们以简单的php方式进行操作,
<form [formGroup]="dnFormGroup">
<fieldset>
<div class="row">
<section class="col col-6">
<label class="input">
<i class="icon-append fa fa-user"></i>
<input formControlName="displayName" type="text" minlength="3" maxlength="10" placeholder="Display name">
<b class="tooltip tooltip-top-right"> <i class="fa fa-user txt-color-teal"></i> Please provide a 3 to 10 char name for site display purposes.</b>
</label>
<div *ngIf="dnFormGroup.get('displayName').hasError && dnFormGroup.get('displayName').hasError('displayNameTaken')">
Display Name is already used
</div>
</section>
</div>
</fieldset>
</form>
答案 3 :(得分:1)
只需使用此正则表达式
\d\d\d\d\d\d*
提取所有5位或更多位数的匹配。然后,您只需检查第一个匹配项并返回
function getFirstOccr($srcStr, $places=5)
{
// $matchStr = '\d{'.$places.'}\d*';
$matchStr = str_repeat('\d', $places).'\d*';
preg_match('/'.$matchStr.'/', $srcStr, $matches);
return isset($matches[0]) ? strpos($srcStr,$matches[0]) : false;
}
$srcStr = "20 plus 1000 is not 20000.";
print getFirstOccr($srcStr,5);
我认为这应该是计算效率最高的
答案 4 :(得分:0)
如果您始终要使用10000,那么可以很容易地使用\d{5}
查找前5位数字,并且如果您想要字符位置,则可以使用PREG_OFFSET_CAPTURE ...
function firstNumPos($text){
preg_match('/(\d{5})/', $text, $m, PREG_OFFSET_CAPTURE);
return isset($m[0]) ? $m[0][1] : false;
}
echo firstNumPos('20 plus 1000 is not 20000.');