Хранить номера телефонов только с номерами и с «х» для расширения? - PullRequest
0 голосов
/ 13 марта 2012

У меня есть тестовая функция, которая очищает номера телефонов и позволяет хранить только цифры и символы "x" или "X". У меня есть это, где он делает большую часть этого, кроме того, что позволяет несколько х, которые я не хочу. Кто-нибудь может помочь мне добавить его в регулярное выражение, а также сообщить мне, если вы обнаружите потенциальные проблемы?

CREATE Function [dbo].[RemoveAlphaCharacters](@Temp VarChar(1000))
Returns VarChar(1000)
AS
Begin

    While PatIndex('%[^0-9,x,X]%', @Temp) > 0
        Set @Temp = Stuff(@Temp, PatIndex('%[^0-9,x,X]%', @Temp), 1, '')

    Return @TEmp
End

1 Ответ

2 голосов
/ 13 марта 2012

Проблема с PATINDEX заключается в том, что он не может реально определить, что шаблон должен измениться после первого попадания в строку.Поэтому, возможно, этот подход будет проще:

CREATE FUNCTION [dbo].[RemoveAlphaCharacters]
(
    @Temp VARCHAR(1000)
)
RETURNS VARCHAR(1000)
AS
BEGIN
    DECLARE @i INT, @hitX BIT, @t VARCHAR(1000), @c CHAR(1);

    SELECT @i = 1, @hitX = 0, @t = '';

    WHILE @i <= LEN(@Temp)
    BEGIN
        SET @c = SUBSTRING(@Temp, @i, 1);
        IF LOWER(@c) = 'x' AND @hitX = 0
        BEGIN
            SET @t = @t + @c;
            SET @hitX = 1;
        END
        IF @c LIKE '[0-9]'
        BEGIN
            SET @t = @t + @c;
        END 

        SET @i = @i + 1;
    END
    RETURN(@t);
END
GO

SELECT dbo.RemoveAlphaCharacters('401-867-9092');
SELECT dbo.RemoveAlphaCharacters('401-867-9092x32');
SELECT dbo.RemoveAlphaCharacters('401-867-9092x32x54');

Результаты:

4018679092
4018679092x32
4018679092x3254
...