0

次の関数を使用して、電話番号フィールドをサニタイズしています。

CREATE Function [fnRemoveNonNumericCharacters](@strText VARCHAR(1000))
RETURNS VARCHAR(1000)
AS
BEGIN
    WHILE PATINDEX('%[^0-9]%', @strText) > 0
    BEGIN
        SET @strText = STUFF(@strText, PATINDEX('%[^0-9]%', @strText), 1, '')
    END
    RETURN @strText
END

+上記のパターンを変更して、記号が受け入れ可能な文字(国際番号の場合)であることを考慮に入れるにはどうすればよいですか?

ありがとうございました

4

1 に答える 1

0

パターンとして'%[^ 0-9 +]%'を使用します。ただし、これにより、数字のどこにでもプラス記号を使用できます。実際に行うべきことは、最初の文字が「+」であるかどうかをテストし、そうである場合は、結果のサニタイズされた番号の前に付けるだけです。これが私の実装です:

CREATE Function [fnRemoveNonNumericCharacters](@strText VARCHAR(1000))
RETURNS VARCHAR(1000)
AS
BEGIN
    declare @index int
    declare @hasPlus bit

    set @strText = LTRIM(@strText)

    if( '+' = left(@strText, 1) )
    begin
        set @hasPlus = 1
    end
    else
    begin
        set @hasPlus = 0
    end

    set @index = PATINDEX('%[^0-9]%', @strText)

    WHILE @index > 0
    BEGIN
        SET @strText = STUFF(@strText, @index, 1, '')

        set @index = PATINDEX('%[^0-9]%', @strText)
    END

    if( 1 = @hasPlus )
    begin
        set @strText = '+' + @strText
    end

    RETURN @strText
END
于 2013-03-27T05:49:42.433 に答える