Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex T-SQL中具有开始/结束输入标记的等效正则表达式_Regex_Tsql - Fatal编程技术网

Regex T-SQL中具有开始/结束输入标记的等效正则表达式

Regex T-SQL中具有开始/结束输入标记的等效正则表达式,regex,tsql,Regex,Tsql,我正在尝试让以下正则表达式工作: ^[a-zA-Z][a-zA-Z ''.-]+[a-zA-Z]$ 它应该允许任何字母、空格、撇号、句号和连字符,只要开头和结尾字符是字母 John - ok John Smith - ok John-Smith - ok John.Smith - ok .John Smith - not ok John Smith. - not ok 当我在T-SQL中使用它时,它似乎不起作用,我不确定它是否与T-SQL中不兼容的输入开始/结束标记相匹配

我正在尝试让以下正则表达式工作:

^[a-zA-Z][a-zA-Z ''.-]+[a-zA-Z]$
它应该允许任何字母、空格、撇号、句号和连字符,只要开头和结尾字符是字母

John        - ok
John Smith  - ok
John-Smith  - ok
John.Smith  - ok
.John Smith - not ok
John Smith. - not ok
当我在T-SQL中使用它时,它似乎不起作用,我不确定它是否与T-SQL中不兼容的输入开始/结束标记相匹配。如何将其转换为有效的T-SQL

CREATE Function [dbo].[IsValidName](@value VarChar(MAX))
RETURNS INT
AS
Begin
    DECLARE @temp INT

    SET @temp = (
        SELECT                  
            CASE WHEN @value LIKE '%^[a-zA-Z][a-zA-Z ''.-]+[a-zA-Z]$%' THEN 1           
            ELSE 0
        END     
    )


    RETURN @Temp
End

T-SQL不支持“开箱即用”的正则表达式。根据您使用的环境的不同,有不同的解决方案,但没有一种可能是“纯T-SQL”。在Microsoft环境中,可以使用CLR过程来实现这一点


请参阅以获取一些选项。

我制作了类似的东西来清理数据,删除非字母字符,我对其进行了轻微修改以满足您的需要

CREATE Function [dbo].Func (@Temp VarChar(1000))
Returns VarChar(1000)
AS
BEGIN
DECLARE @Len INT = LEN(@Temp)
DECLARE @RETURN INT
Declare @KeepValues as varchar(50)
Set @KeepValues = '%[^a-z^ ]%'
IF PatIndex(@KeepValues, @Temp) = 1
BEGIN
    Set @RETURN = 0
END
IF PATINDEX(@KeepValues, @Temp) = @Len
BEGIN
    SET @RETURN = 0
END
IF PATINDEX(@KeepValues, @Temp) = 0
SET @RETURN = 1
IF @RETURN IS NULL
 BEGIN
   SET @Return = 1
 END
 RETURN @RETURN
END

这是假设您不需要对受限字符执行任何类型的数据清理。如果您需要清除受限字符,请告诉我,我们可以在其中再添加一点,但根据您的数据集,这将返回正确答案

LIKE运算符不使用正则表达式。它使用的通配符集非常有限。除此之外,对于
^
$
+
没有等价物。看一下医生或医生。如果您想要完全的正则表达式支持,您可能必须使用CLR函数或过程。