5

各文字が 0 から 9 までの数字またはスペースである値に一致する正規表現が必要です。値は正確に 11 桁である必要があります。

たとえば、「012 345 678 90」または「01234567890」の形式の値と一致する必要があります。

誰でもこれについて私を助けてもらえますか?

4

10 に答える 10

23

将来これを見つけるかもしれない他のオーストラリアの開発者のために:

^(\d *?){11}$

各桁の後に0個以上のスペースがある11桁に一致します。

編集:

@ElliottFrischが述べたように、ABNには適切な検証のための数式もあります。正規表現を使用してABNを適切に検証することは非常に困難(または不可能)ですが、上記の正規表現は少なくとも11桁の数字と間隔を一致させます。実際の検証を行っている場合は、この場合、正規表現はツールではない可能性があります。

参考文献:

https://abr.business.gov.au/Help/AbnFormat

PHPの実装は次のとおりです。

http://www.clearwater.com.au/code

いつか利用できなくなった場合に備えて、上記のページからコピーしたコード:

//   ValidateABN
//     Checks ABN for validity using the published 
//     ABN checksum algorithm.
//
//     Returns: true if the ABN is valid, false otherwise.
//      Source: http://www.clearwater.com.au/code
//      Author: Guy Carpenter
//     License: The author claims no rights to this code.  
//              Use it as you wish.

function ValidateABN($abn)
{
    $weights = array(10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19);

    // strip anything other than digits
    $abn = preg_replace("/[^\d]/","",$abn);

    // check length is 11 digits
    if (strlen($abn)==11) {
        // apply ato check method 
        $sum = 0;
        foreach ($weights as $position=>$weight) {
            $digit = $abn[$position] - ($position ? 0 : 1);
            $sum += $weight * $digit;
        }
        return ($sum % 89)==0;
    } 
    return false;
}

そして私がここで見つけたjavascriptのもの:

http://www.mathgen.ch/codes/abn.html

于 2013-02-28T11:44:56.773 に答える
1

正規表現について読んだことがありますか?これは非常に簡単です。

^[0-9 ]+$
于 2013-01-05T18:08:15.603 に答える
0

JavaScript のバージョン:

function checkABN(str) {
    if (!str || str.length !== 11) {
        return false;
    }
    var weights = [10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19],
        checksum = str.split('').map(Number).reduce(
        function(total, digit, index) {
            if (!index) {
                digit--;
            }
            return total + (digit * weights[index]);
        },
        0
    );

    if (!checksum || checksum % 89 !== 0) {
        return false;
    }

    return true;
}
于 2015-09-17T07:53:30.810 に答える