验证字符串长度为 10 位,其中前 5 位为相同数字,后 5 位为相同数字

发布于 2024-10-01 10:55:42 字数 317 浏览 4 评论 0原文

我正在尝试将此 Java 移植到 PHP:

String _value = '1111122222';
if (_value.matches("(1{5}|2{5}|3{5}|4{5}|5{5}|6{5}|7{5}|8{5}|9{5}){2}")) {
    // check for number with the same first 5 and last 5 digits 
    return true;
}

正如注释所示,我想测试像“1111122222”或“5555566666”这样的字符串,

如何在 PHP 中执行此操作?

I'm trying to port this Java to PHP:

String _value = '1111122222';
if (_value.matches("(1{5}|2{5}|3{5}|4{5}|5{5}|6{5}|7{5}|8{5}|9{5}){2}")) {
    // check for number with the same first 5 and last 5 digits 
    return true;
}

As the comment suggests, I want to test for a string like '1111122222' or '5555566666'

How can I do this in PHP?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

叫嚣ゝ 2024-10-08 10:55:42

您可以使用 preg_match 来执行此操作:

preg_match('/^(1{5}|2{5}|3{5}|4{5}|5{5}|6{5}|7{5}|8{5}|9{5}){2}$/', $_value)

这会返回匹配项的数量(即 0或 1) 或false(如果有错误)。由于 Stringmatches 方法仅在整个字符串与给定模式匹配但 preg_match 不匹配时返回 true。 t(一个子字符串就足够了),您需要使用 ^$ 设置字符串的开头和结尾标记。

您还可以使用这个较短的正则表达式:

^(?:(\d)\1{4}){2}$

如果第二个数字序列需要与前一个不同,请使用:

^(\d)\1{4}(?!\1)(\d)\2{4}$

You can use preg_match to do so:

preg_match('/^(1{5}|2{5}|3{5}|4{5}|5{5}|6{5}|7{5}|8{5}|9{5}){2}$/', $_value)

This returns the number of matches (i.e. either 0 or 1) or false if there was an error. Since the String’s matches method returns only true if the whole string matches the given pattern but preg_match doesn’t (a substring suffices), you need to set markers for the start and the end of the string with ^ and $.

You can also use this shorter regular expression:

^(?:(\d)\1{4}){2}$

And if the second sequence of numbers needs to be different from the former, use this:

^(\d)\1{4}(?!\1)(\d)\2{4}$
始终不够 2024-10-08 10:55:42

好吧,你可以这样做:

$regex = '/(\d)\1{4}(\d)\2{4}/';
if (preg_match($regex, $value)) {
    return true;
}

这应该比你发布的正则表达式更有效(和可读)......

或者,一个更短(并且可能更干净)的正则表达式:

$regex = '/((\d)\2{4}){2}/';

Well, you could do:

$regex = '/(\d)\1{4}(\d)\2{4}/';
if (preg_match($regex, $value)) {
    return true;
}

Which should be much more efficient (and readable) than the regex you posted...

Or, an even shorter (and potentially cleaner) regex:

$regex = '/((\d)\2{4}){2}/';
老旧海报 2024-10-08 10:55:42
$f = substr($_value, 0, 5);
$s = substr($_value, -5);
return (substr_count($f, $f[0]) == 5 && substr_count($s, $s[0]) == 5);
$f = substr($_value, 0, 5);
$s = substr($_value, -5);
return (substr_count($f, $f[0]) == 5 && substr_count($s, $s[0]) == 5);
゛清羽墨安 2024-10-08 10:55:42

换算如下。 preg_match() 是关键:http://www.php.net/preg_match

$value = '1111122222';
if (preg_match('/^(1{5}|2{5}|3{5}|4{5}|5{5}|6{5}|7{5}|8{5}|9{5}){2}$/', $value)) {
    // check for number with the same first 5 and last 5 digits 
    return true;
}

Conversion is below. preg_match() is the key: http://www.php.net/preg_match

$value = '1111122222';
if (preg_match('/^(1{5}|2{5}|3{5}|4{5}|5{5}|6{5}|7{5}|8{5}|9{5}){2}$/', $value)) {
    // check for number with the same first 5 and last 5 digits 
    return true;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文