0

+XXX-X-XXX-XXXX (国コードとして +XXX)、(都市コードとして X)、(最初の 3 桁として XXX)、(2 番目の 4 桁として XXX) としてユーザーから電話番号を入力しています。次のコードのように、正規表現を使用してエントリを確認しました。

function validate(form) {
    var phone = form.phone.value;
    var phoneRegex = /^(\+|00)\d{2,3}-\d{1,2}-\d{3}-\d{4}$/g;
    //Checking 'phone' and its regular expressions  
    if(phone == "") {
      inlineMsg('phone','<strong>Error</strong><br />You must enter phone number.',2);
    return false;
    }
    if(!phone.match(phoneRegex)) {
      inlineMsg('phone','<strong>Error</strong><br />Enter valid phone <br />+xxx-x-xxx-xxxx (or) <br />00xxx-x-xxx-xxxx.',2);
    return false;
    }
  return true;
}

非常にうまく機能していますが、問題は

EDIT : ユーザーが +XXXXXXXXXXX (すべて一緒に) として入力し、Enter キーを押すか、別のフィールドに移動すると、+XXX-X-XXX-XXXX である Regex に従って入力が自己設定されます。

このタスクを実行する方法の例をいくつか教えてもらえますか。ありがとうございました

4

2 に答える 2

1

次のように、要素の onblur メソッドにコールバックを設定します。

var isValidPhoneNumber = function(string) {
    ...
}

var reformat = function(string) {
    /*
     *  > reformat('example 123 1 1 2 3 123-45')
     *  "+123-1-123-1234"
     */
    var numbers = string.match(/\d/g);
    return '+' + [
        numbers.slice(0,3).join(''),
        numbers.slice(3,4).join(''),
        numbers.slice(4,7).join(''),
        numbers.slice(7,11).join('')
    ].join('-');
}

var reformatPhoneNumber = function() {
    var inputElement = this;
    var value = inputElement.value;

    if (isValidPhoneNumber(value))
        inputElement.value = reformat(inputElement.value);
    else
        // complain to user
}

onblur コールバック ハンドラを設定する方法の 2 つの例を次に示します。

document.getElementById('yourinputelement').onblur = reformatPhoneNumber;
<input ... onblur="reformatPhoneNumber"/>

必要に応じて、より多くの検証コードを追加することreformatPhoneNumberも、ユーザーが入力している番号を常に検証することもできます。

電話番号の形式が の場合にのみこれを行うには、if ステートメントに を+ABCDEFGHIJK追加します。string.match(/^\+\d{11}$/)!==null(は^$文字列の開始と終了を\+意味し、プラス記号を\d意味し、数字の 0 ~ 9 を正確に繰り返すことを意味し{11}ます)。具体的には:

function isPlusAndEleventDigits(string) {
    /*
     *  Returns whether string is exactly of the form '+00000000000'
     *  where 0 means any digit 0-9
     */
    return string.match(/^\+\d{11}$/)!==null
}
于 2012-04-21T09:17:02.523 に答える
1

入力を整形してみてください:
result = subject.replace(/^((\+|00)\d{2,3})-?(\d{1,2})-?(\d{3})-?(\d{4})$/mg, "$1-$3-$4-$5");

その後、次の手順を実行します。

于 2012-04-21T07:53:14.587 に答える